home *** CD-ROM | disk | FTP | other *** search
Text File | 1993-02-22 | 97.4 KB | 4,033 lines |
- *** 1.11 1992/12/28 07:42:38
- --- Changelo 1993/02/22 17:06:27
- ***************
- *** 291,293 ****
- --- 291,298 ----
- i have done allthe non-io classes. still working on those.
-
- ---------------------------- Patchlevel 16 -----------------------------------
- +
- + *.cc:: ++jrb
- + sync up with rest of libg++-2.3. all classes done now.
- +
- + ---------------------------- Patchlevel 17 -----------------------------------
- *** 1.11 1992/12/28 07:42:38
- --- PatchLev.h 1993/02/22 17:06:28
- ***************
- *** 1,5 ****
-
- ! #define PatchLevel "16"
-
- /*
- * the Patch Level above is to identify the version
- --- 1,5 ----
-
- ! #define PatchLevel "17"
-
- /*
- * the Patch Level above is to identify the version
- *** 1.2 1992/06/03 02:12:17
- --- editbuf.cc 1993/02/22 17:06:30
- ***************
- *** 102,108 ****
- gap_right (pos);
- }
-
- ! void edit_buffer::gap_left (size_t pos)
- {
- register buf_char *to, *from;
- register long i;
- --- 102,108 ----
- gap_right (pos);
- }
-
- ! void edit_buffer::gap_left (_G_size_t pos)
- {
- register buf_char *to, *from;
- register long i;
- ***************
- *** 153,159 ****
- /* QUIT;*/
- }
-
- ! void edit_buffer::gap_right (size_t pos)
- {
- register buf_char *to, *from;
- register long i;
- --- 153,159 ----
- /* QUIT;*/
- }
-
- ! void edit_buffer::gap_right (_G_size_t pos)
- {
- register buf_char *to, *from;
- register long i;
- ***************
- *** 209,215 ****
- {
- register buf_char *p1, *p2, *lim;
- buf_char *old_data = data;
- ! int long s1 = size1();
-
- if (gap_size() >= k)
- return;
- --- 209,215 ----
- {
- register buf_char *p1, *p2, *lim;
- buf_char *old_data = data;
- ! long s1 = size1();
-
- if (gap_size() >= k)
- return;
- ***************
- *** 428,434 ****
- // Called by fseek(fp, pos, whence) if fp is bound to a edit_buffer.
-
- streampos edit_streambuf::seekoff(streamoff offset, _seek_dir dir,
- ! int mode=ios::in|ios::out)
- {
- struct edit_buffer *buffer = str->buffer;
- disconnect_gap_from_file(buffer);
- --- 428,434 ----
- // Called by fseek(fp, pos, whence) if fp is bound to a edit_buffer.
-
- streampos edit_streambuf::seekoff(streamoff offset, _seek_dir dir,
- ! int mode /* =ios::in|ios::out*/)
- {
- struct edit_buffer *buffer = str->buffer;
- disconnect_gap_from_file(buffer);
- ***************
- *** 586,592 ****
- edit_buffer::edit_buffer()
- {
- buf_size = /*200;*/ 15; /* for testing! */
- ! data = malloc(buf_size);
- files = NULL;
- #ifndef OLD_STDIO
- _gap_start = data;
- --- 586,592 ----
- edit_buffer::edit_buffer()
- {
- buf_size = /*200;*/ 15; /* for testing! */
- ! data = (buf_char*)malloc(buf_size);
- files = NULL;
- #ifndef OLD_STDIO
- _gap_start = data;
- ***************
- *** 611,617 ****
- chain = buf->start_mark.chain;
- buf->start_mark.chain = this;
- mark_pointer size1 = buf->size1() << 1;
- ! size_t gap_size = buf->gap_size() << 1;
- delta <<= 1;
-
- // check if new and old marks are opposite sides of gap
- --- 611,617 ----
- chain = buf->start_mark.chain;
- buf->start_mark.chain = this;
- mark_pointer size1 = buf->size1() << 1;
- ! _G_size_t gap_size = buf->gap_size() << 1;
- delta <<= 1;
-
- // check if new and old marks are opposite sides of gap
- ***************
- *** 647,653 ****
- *ptr = this->chain;
- }
-
- ! size_t edit_string::length() const
- {
- ptrdiff_t delta = end->ptr(buffer) - start->ptr(buffer);
- if (end->ptr(buffer) <= buffer->gap_start() ||
- --- 647,653 ----
- *ptr = this->chain;
- }
-
- ! _G_size_t edit_string::length() const
- {
- ptrdiff_t delta = end->ptr(buffer) - start->ptr(buffer);
- if (end->ptr(buffer) <= buffer->gap_start() ||
- ***************
- *** 656,665 ****
- return delta - buffer->gap_size();
- }
-
- ! buf_char * edit_string::copy_bytes(size_t *lenp) const
- {
- char *new_str;
- ! size_t len1, len2;
- buf_char *start1, *start2;
- start1 = start->ptr(buffer);
- if (end->ptr(buffer) <= buffer->gap_start()
- --- 656,665 ----
- return delta - buffer->gap_size();
- }
-
- ! buf_char * edit_string::copy_bytes(_G_size_t *lenp) const
- {
- char *new_str;
- ! _G_size_t len1, len2;
- buf_char *start1, *start2;
- start1 = start->ptr(buffer);
- if (end->ptr(buffer) <= buffer->gap_start()
- ***************
- *** 691,697 ****
- {
- edit_streambuf dst_file(this, ios::out);
- if (buffer == src->buffer /*&& ???*/) { /* overly conservative */
- ! size_t src_len;
- buf_char *new_str;
- new_str = src->copy_bytes(&src_len);
- dst_file.sputn(new_str, src_len);
- --- 691,697 ----
- {
- edit_streambuf dst_file(this, ios::out);
- if (buffer == src->buffer /*&& ???*/) { /* overly conservative */
- ! _G_size_t src_len;
- buf_char *new_str;
- new_str = src->copy_bytes(&src_len);
- dst_file.sputn(new_str, src_len);
- *** 1.8 1992/12/11 19:39:04
- --- filebuf.cc 1993/02/22 17:06:31
- ***************
- *** 17,23 ****
-
- #include <ioprivat.h>
- #include <sys/types.h>
- - #include <sys/file.h>
- #include <sys/stat.h>
- #include <fcntl.h>
- #include <errno.h>
- --- 17,22 ----
- ***************
- *** 76,105 ****
- _fb._fileno = -1;
- }
-
- - void streambuf::_un_link()
- - {
- - if (_flags & _S_LINKED) {
- - streambuf **f;
- - for (f = &_list_all; *f != NULL; f = &(*f)->xchain()) {
- - if (*f == this) {
- - *f = xchain();
- - break;
- - }
- - }
- - _flags &= ~_S_LINKED;
- - }
- - }
- -
- - void streambuf::_link_in()
- - {
- - if ((_flags & _S_LINKED) == 0) {
- - _flags |= _S_LINKED;
- - xchain() = _list_all;
- - _list_all = this;
- - }
- - }
- -
- -
- filebuf::filebuf() : backupbuf(CLOSED_FILEBUF_FLAGS)
- {
- init();
- --- 75,80 ----
- ***************
- *** 111,117 ****
- attach(fd);
- }
-
- ! filebuf::filebuf(int fd, char* p, size_t len) : backupbuf(CLOSED_FILEBUF_FLAGS)
- {
- init();
- attach(fd);
- --- 86,92 ----
- attach(fd);
- }
-
- ! filebuf::filebuf(int fd, char* p, _G_size_t len) : backupbuf(CLOSED_FILEBUF_FLAGS)
- {
- init();
- attach(fd);
- ***************
- *** 127,136 ****
- }
-
- #ifdef atarist
- ! extern "C" extern int __default_mode__;
- #endif
-
- ! filebuf* filebuf::open(const char *filename, int mode, int prot)
- {
- if (is_open())
- return NULL;
- --- 102,111 ----
- }
-
- #ifdef atarist
- ! extern "C" int __default_mode__;
- #endif
-
- ! filebuf* filebuf::open(const char *filename, ios::openmode mode, int prot)
- {
- if (is_open())
- return NULL;
- ***************
- *** 139,149 ****
- #ifdef atarist
- int rw_mode = (__default_mode__) ? _S_IS_BINARY : 0;
- #endif
- if ((mode & (ios::in|ios::out)) == (ios::in|ios::out)) {
- posix_mode = O_RDWR;
- read_write = 0;
- }
- ! else if (mode & (ios::out|ios::app))
- posix_mode = O_WRONLY, read_write = _S_NO_READS;
- else if (mode & (int)ios::in)
- posix_mode = O_RDONLY, read_write = _S_NO_WRITES;
- --- 114,126 ----
- #ifdef atarist
- int rw_mode = (__default_mode__) ? _S_IS_BINARY : 0;
- #endif
- + if (mode & ios::app)
- + mode |= ios::out;
- if ((mode & (ios::in|ios::out)) == (ios::in|ios::out)) {
- posix_mode = O_RDWR;
- read_write = 0;
- }
- ! else if (mode & ios::out)
- posix_mode = O_WRONLY, read_write = _S_NO_READS;
- else if (mode & (int)ios::in)
- posix_mode = O_RDONLY, read_write = _S_NO_WRITES;
- ***************
- *** 152,158 ****
- if ((mode & (int)ios::trunc) || mode == (int)ios::out)
- posix_mode |= O_TRUNC;
- if (mode & ios::app)
- ! posix_mode |= O_APPEND;
- if (!(mode & (int)ios::nocreate) && mode != ios::in)
- posix_mode |= O_CREAT;
- if (mode & (int)ios::noreplace)
- --- 129,135 ----
- if ((mode & (int)ios::trunc) || mode == (int)ios::out)
- posix_mode |= O_TRUNC;
- if (mode & ios::app)
- ! posix_mode |= O_APPEND, read_write |= _S_IS_APPENDING;
- if (!(mode & (int)ios::nocreate) && mode != ios::in)
- posix_mode |= O_CREAT;
- if (mode & (int)ios::noreplace)
- ***************
- *** 167,177 ****
- else if(mode & (int)ios::text)
- rw_mode &= ~_S_IS_BINARY;
- read_write |= rw_mode;
- ! xsetflags(read_write, (_S_NO_READS+_S_NO_WRITES)|rw_mode);
- #else
- ! xsetflags(read_write, _S_NO_READS+_S_NO_WRITES);
- #endif
- ! if (mode & ios::ate) {
- if (seekoff(0, ios::end) == EOF)
- return NULL;
- }
- --- 144,154 ----
- else if(mode & (int)ios::text)
- rw_mode &= ~_S_IS_BINARY;
- read_write |= rw_mode;
- ! xsetflags(read_write, (_S_NO_READS+_S_NO_WRITES+_S_IS_APPENDING)|rw_mode);
- #else
- ! xsetflags(read_write, _S_NO_READS+_S_NO_WRITES+_S_IS_APPENDING);
- #endif
- ! if (mode & (ios::ate|ios::app)) {
- if (seekoff(0, ios::end) == EOF)
- return NULL;
- }
- ***************
- *** 202,208 ****
- case 'a':
- omode = O_WRONLY;
- oflags = O_CREAT|O_APPEND;
- ! read_write = _S_NO_READS;
- break;
- #ifdef atarist
- case 'b':
- --- 179,185 ----
- case 'a':
- omode = O_WRONLY;
- oflags = O_CREAT|O_APPEND;
- ! read_write = _S_NO_READS|_S_IS_APPENDING;
- break;
- #ifdef atarist
- case 'b':
- ***************
- *** 226,235 ****
- _fb._fileno = fdesc;
- #ifdef atarist
- read_write |= rw_mode;
- ! xsetflags(read_write, (_S_NO_READS+_S_NO_WRITES)|rw_mode);
- #else
- ! xsetflags(read_write, _S_NO_READS+_S_NO_WRITES);
- #endif
- _link_in();
- return this;
- }
- --- 203,215 ----
- _fb._fileno = fdesc;
- #ifdef atarist
- read_write |= rw_mode;
- ! xsetflags(read_write, (_S_NO_READS+_S_NO_WRITES+_S_IS_APPENDING)|rw_mode);
- #else
- ! xsetflags(read_write, _S_NO_READS+_S_NO_WRITES+_S_IS_APPENDING);
- #endif
- + if (read_write & _S_IS_APPENDING)
- + if (seekoff(0, ios::end) == EOF)
- + return NULL;
- _link_in();
- return this;
- }
- ***************
- *** 240,255 ****
- return NULL;
- _fb._fileno = fd;
- #ifdef atarist
- ! xsetflags(_S_DELETE_DONT_CLOSE |((__default_mode__)? _S_IS_BINARY : 0),
- ! (_S_DELETE_DONT_CLOSE+_S_NO_READS+_S_NO_WRITES) |
- ! ((__default_mode__)? _S_IS_BINARY : 0));
- #else
- ! xsetflags(_S_DELETE_DONT_CLOSE,
- ! _S_DELETE_DONT_CLOSE+_S_NO_READS+_S_NO_WRITES);
- #endif
- return this;
- }
-
- int filebuf::overflow(int c)
- {
- if (xflags() & _S_NO_WRITES) // SET ERROR
- --- 220,242 ----
- return NULL;
- _fb._fileno = fd;
- #ifdef atarist
- ! xsetflags((__default_mode__)? _S_IS_BINARY : 0,
- ! (_S_NO_READS+_S_NO_WRITES) | ((__default_mode__) ? _S_IS_BINARY : 0));
- #else
- ! xsetflags(0, _S_NO_READS+_S_NO_WRITES);
- #endif
- return this;
- }
-
- + streambuf* filebuf::setbuf(char* p, _G_size_t len)
- + {
- + if (streambuf::setbuf(p, len) == NULL)
- + return NULL;
- + setp(_base, _base);
- + setg(_base, _base, _base);
- + return this;
- + }
- +
- int filebuf::overflow(int c)
- {
- if (xflags() & _S_NO_WRITES) // SET ERROR
- ***************
- *** 289,295 ****
- return (EOF);
- #endif
-
- ! if (xflags() & _S_NO_READS)
- return EOF;
- if (gptr() < egptr())
- return *(unsigned char*)gptr();
- --- 276,282 ----
- return (EOF);
- #endif
-
- ! if (xflags() & _S_NO_READS)
- return EOF;
- if (gptr() < egptr())
- return *(unsigned char*)gptr();
- ***************
- *** 305,312 ****
- if (do_flush()) return EOF;
- #endif
-
- - switch_to_get_mode();
- -
- _G_ssize_t count = sys_read(base(), ebuf() - base());
- if (count <= 0) {
- if (count == 0)
- --- 292,297 ----
- ***************
- *** 323,333 ****
- return *(unsigned char*)gptr();
- }
-
- ! int filebuf::do_write(const char *data, int to_do)
- {
- if (to_do == 0)
- return 0;
- ! if (egptr() != pbase()) {
- long new_pos = sys_seek(pbase()-egptr(), ios::cur);
- if (new_pos == -1)
- return EOF;
- --- 308,326 ----
- return *(unsigned char*)gptr();
- }
-
- ! int filebuf::do_write(const char *data, _G_size_t to_do)
- {
- if (to_do == 0)
- return 0;
- ! if (xflags() & _S_IS_APPENDING) {
- ! // On a system without a proper O_APPEND implementation,
- ! // you would need to sys_seek(0, ios::end) here, but is
- ! // is not needed nor desirable for Unix- or Posix-like systems.
- ! // Instead, just indicate that offset (before and after) is
- ! // unpredictable.
- ! _fb._offset = -1;
- ! }
- ! else if (egptr() != pbase()) {
- long new_pos = sys_seek(pbase()-egptr(), ios::cur);
- if (new_pos == -1)
- return EOF;
- ***************
- *** 372,377 ****
- --- 365,373 ----
- streampos result, new_offset, delta;
- _G_ssize_t count;
-
- + if (mode == 0) // Don't move any pointers.
- + dir = ios::cur, offset = 0;
- +
- // Flush unwritten characters.
- // (This may do an unneeded write if we seek within the buffer.
- // But to be able to switch to reading, we would need to set
- ***************
- *** 417,423 ****
- // If destination is within current buffer, optimize:
- if (_fb._offset >= 0 && _eback != NULL) {
- // Offset relative to start of main get area.
- ! fpos_t rel_offset = offset - _fb._offset
- + (eGptr()-Gbase());
- if (rel_offset >= 0) {
- if (in_backup())
- --- 413,419 ----
- // If destination is within current buffer, optimize:
- if (_fb._offset >= 0 && _eback != NULL) {
- // Offset relative to start of main get area.
- ! _G_fpos_t rel_offset = offset - _fb._offset
- + (eGptr()-Gbase());
- if (rel_offset >= 0) {
- if (in_backup())
- ***************
- *** 429,435 ****
- }
- // If we have streammarkers, seek forward by reading ahead.
- if (have_markers()) {
- ! int to_skip = rel_offset - (_gptr - _eback);
- if (ignore(to_skip) != to_skip)
- goto dumb;
- return offset;
- --- 425,431 ----
- }
- // If we have streammarkers, seek forward by reading ahead.
- if (have_markers()) {
- ! long to_skip = rel_offset - (_gptr - _eback);
- if (ignore(to_skip) != to_skip)
- goto dumb;
- return offset;
- ***************
- *** 512,541 ****
- _G_ssize_t filebuf::sys_read(char* buf, size_t size)
- {
- for (;;) {
- _G_ssize_t count = ::read(_fb._fileno, buf, size);
- if (count != -1 || errno != EINTR)
- return count;
- }
- }
-
- ! fpos_t filebuf::sys_seek(fpos_t offset, _seek_dir dir)
- {
- return ::lseek(fd(), offset, (int)dir);
- }
-
- ! _G_ssize_t filebuf::sys_write(const void *buf, long n)
- {
- long to_do = n;
- while (to_do > 0) {
- _G_ssize_t count = ::write(fd(), buf, to_do);
- if (count == EOF) {
- if (errno == EINTR)
- continue;
- ! else
- break;
- }
- to_do -= count;
- ! buf += count;
- }
- n -= to_do;
- if (_fb._offset >= 0)
- --- 508,547 ----
- _G_ssize_t filebuf::sys_read(char* buf, size_t size)
- {
- for (;;) {
- + #ifdef atarist
- + _G_ssize_t count = ::_read(_fb._fileno, buf, size);
- + #else
- _G_ssize_t count = ::read(_fb._fileno, buf, size);
- + #endif
- if (count != -1 || errno != EINTR)
- return count;
- }
- }
-
- ! _G_fpos_t filebuf::sys_seek(_G_fpos_t offset, _seek_dir dir)
- {
- return ::lseek(fd(), offset, (int)dir);
- }
-
- ! _G_ssize_t filebuf::sys_write(const void *buf, _G_size_t n)
- {
- long to_do = n;
- while (to_do > 0) {
- + #ifdef atarist
- + _G_ssize_t count = ::_write(fd(), buf, to_do);
- + #else
- _G_ssize_t count = ::write(fd(), buf, to_do);
- + #endif
- if (count == EOF) {
- if (errno == EINTR)
- continue;
- ! else {
- ! _flags |= _S_ERR_SEEN;
- break;
- + }
- }
- to_do -= count;
- ! buf = (void*)((char*)buf + count);
- }
- n -= to_do;
- if (_fb._offset >= 0)
- ***************
- *** 553,569 ****
- return ::close(fd());
- }
-
- ! size_t filebuf::sputn(const char *s, size_t n)
- {
- ! if (n <= 0)
- return 0;
- // This is an optimized implementation.
- // If the amount to be written straddles a block boundary
- // (or the filebuf is unbuffered), use sys_write directly.
-
- ! // First fill the buffer.
- ! int to_do = n;
- ! int count = _epptr - _pptr; // Space available.
- if (count > 0) {
- if (count > to_do)
- count = to_do;
- --- 559,589 ----
- return ::close(fd());
- }
-
- ! _G_size_t filebuf::xsputn(const char *s, _G_size_t n)
- {
- ! if (n == 0)
- return 0;
- // This is an optimized implementation.
- // If the amount to be written straddles a block boundary
- // (or the filebuf is unbuffered), use sys_write directly.
-
- ! _G_size_t to_do = n;
- ! int must_flush = 0;
- ! // First figure out how much space is available in the buffer.
- ! _G_size_t count = _epptr - _pptr; // Space available.
- ! if (linebuffered() && (_flags & _S_CURRENTLY_PUTTING)) {
- ! count =_ebuf - _pptr;
- ! if (count >= n) {
- ! for (register const char *p = s + n; p > s; ) {
- ! if (*--p == '\n') {
- ! count = p - s + 1;
- ! must_flush = 1;
- ! break;
- ! }
- ! }
- ! }
- ! }
- ! // Then fill the buffer.
- if (count > 0) {
- if (count > to_do)
- count = to_do;
- ***************
- *** 573,584 ****
- }
- else {
- register char *p = pptr();;
- ! for (register int i = count; --i >= 0; ) *p++ = *s++;
- }
- pbump(count);
- to_do -= count;
- }
- ! if (to_do > 0) {
- // Next flush the (full) buffer.
- if (__overflow(this, EOF) == EOF)
- return n - to_do;
- --- 593,604 ----
- }
- else {
- register char *p = pptr();;
- ! for (register _G_size_t i = count+1; --i > 0; ) *p++ = *s++;
- }
- pbump(count);
- to_do -= count;
- }
- ! if (to_do + must_flush > 0) {
- // Next flush the (full) buffer.
- if (__overflow(this, EOF) == EOF)
- return n - to_do;
- ***************
- *** 585,592 ****
-
- // Try to maintain alignment: write a whole number of blocks.
- // dont_write is what gets left over.
- ! int block_size = _ebuf - _base;
- ! int dont_write = block_size >= 128 ? to_do % block_size : 0;
-
- _G_ssize_t count = to_do - dont_write;
- if (do_write(s, count) == EOF)
- --- 605,612 ----
-
- // Try to maintain alignment: write a whole number of blocks.
- // dont_write is what gets left over.
- ! _G_size_t block_size = _ebuf - _base;
- ! _G_size_t dont_write = block_size >= 128 ? to_do % block_size : 0;
-
- _G_ssize_t count = to_do - dont_write;
- if (do_write(s, count) == EOF)
- ***************
- *** 602,609 ****
- return n - to_do;
- }
-
- ! size_t filebuf::sgetn(char *s, size_t n)
- {
- // FIXME: OPTIMIZE THIS (specifically, when unbuffered()).
- ! return streambuf::sgetn(s, n);
- }
- --- 622,632 ----
- return n - to_do;
- }
-
- ! _G_size_t filebuf::xsgetn(char *s, _G_size_t n)
- {
- // FIXME: OPTIMIZE THIS (specifically, when unbuffered()).
- ! return streambuf::xsgetn(s, n);
- }
- +
- + // Non-ANSI AT&T-ism: Default open protection.
- + const int filebuf::openprot = 0644;
- *** 1.3 1992/07/17 18:24:43
- --- fstream.cc 1993/02/22 17:06:32
- ***************
- *** 22,59 ****
- #pragma implementation
- #endif
-
- ! ifstream::ifstream()
- {
- ! _strbuf = new filebuf();
- }
-
- ! ifstream::ifstream(int fd)
- {
- ! _strbuf = new filebuf(fd);
- }
-
- ! ifstream::ifstream(const char *name, int mode, int prot)
- {
- ! _strbuf = new filebuf();
- if (!rdbuf()->open(name, mode, prot))
- set(ios::badbit);
- }
-
- ! ofstream::ofstream()
- {
- ! _strbuf = new filebuf();
- ! }
- !
- ! ofstream::ofstream(int fd)
- ! {
- ! _strbuf = new filebuf(fd);
- }
-
- ! ofstream::ofstream(const char *name, int mode, int prot)
- {
- ! _strbuf = new filebuf();
- ! if (!rdbuf()->open(name, mode, prot))
- ! set(ios::badbit);
- }
-
- #if 0
- --- 22,55 ----
- #pragma implementation
- #endif
-
- ! fstreambase::fstreambase()
- {
- ! init(new filebuf());
- }
-
- ! fstreambase::fstreambase(int fd)
- {
- ! init(new filebuf(fd));
- }
-
- ! fstreambase::fstreambase(const char *name, int mode, int prot)
- {
- ! init(new filebuf());
- if (!rdbuf()->open(name, mode, prot))
- set(ios::badbit);
- }
-
- ! void fstreambase::open(const char *name, int mode, int prot)
- {
- ! clear();
- ! if (!rdbuf()->open(name, mode, prot))
- ! set(ios::badbit);
- }
-
- ! void fstreambase::close()
- {
- ! if (!rdbuf()->close())
- ! set(ios::failbit);
- }
-
- #if 0
- ***************
- *** 67,119 ****
- return "w";
- }
- #endif
- -
- - void ifstream::open(const char *name, int mode, int prot)
- - {
- - if (!rdbuf()->open(name, mode, prot))
- - set(ios::badbit);
- - }
- -
- - void ifstream::close()
- - {
- - rdbuf()->close();
- - }
- -
- - void ofstream::close()
- - {
- - rdbuf()->close();
- - }
- -
- - void ofstream::open(const char *name, int mode, int prot)
- - {
- - if (!rdbuf()->open(name, mode, prot))
- - set(ios::badbit);
- - }
- -
- - fstream::fstream()
- - {
- - _strbuf = new filebuf();
- - }
- -
- - fstream::fstream(int fd)
- - {
- - _strbuf = new filebuf(fd);
- - }
- -
- - fstream::fstream(const char *name, int mode, int prot=0664)
- - {
- - _strbuf = new filebuf();
- - if (!rdbuf()->open(name, mode, prot))
- - set(ios::badbit);
- - }
- -
- - void fstream::open(const char *name, int mode, int prot=0664)
- - {
- - if (!rdbuf()->open(name, mode, prot))
- - set(ios::badbit);
- - }
- -
- - void fstream::close()
- - {
- - rdbuf()->close();
- - }
- --- 63,65 ----
- *** 1.3 1992/07/20 22:21:08
- --- igetline.cc 1993/02/22 17:06:33
- ***************
- *** 17,41 ****
-
- #include <iostream.h>
-
- ! istream& istream::getline(char* buf, int len, char delim)
- {
- _gcount = 0;
- if (ipfx1()) {
- ! long count = rdbuf()->sgetline(buf, len, delim, 0);
- ! _gcount = count;
- ! if (count <= 0 || count == len-1)
- set(ios::failbit);
- }
- return *this;
- }
-
- ! istream& istream::get(char* buf, int len, char delim)
- {
- _gcount = 0;
- if (ipfx1()) {
- ! long count = rdbuf()->sgetline(buf, len, delim, -1);
- ! if (count <= 0)
- ! set(ios::failbit);
- else
- _gcount = count;
- }
- --- 17,52 ----
-
- #include <iostream.h>
-
- ! istream& istream::getline(char* buf, _G_size_t len, char delim)
- {
- _gcount = 0;
- if (ipfx1()) {
- ! streambuf *sb = rdbuf();
- ! long count = sb->sgetline(buf, len, delim, -1);
- ! if (count == len-1)
- set(ios::failbit);
- + else {
- + int ch = sb->sbumpc();
- + if (ch == EOF)
- + set(ios::failbit|ios::eofbit);
- + else if (ch == (unsigned char)delim)
- + count++;
- + else
- + sb->sungetc(); // Leave delimiter unread.
- + }
- + _gcount = count;
- }
- return *this;
- }
-
- ! istream& istream::get(char* buf, _G_size_t len, char delim)
- {
- _gcount = 0;
- if (ipfx1()) {
- ! streambuf *sbuf = rdbuf();
- ! long count = sbuf->sgetline(buf, len, delim, -1);
- ! if (count < 0 || (count == 0 && sbuf->sgetc() == EOF))
- ! set(ios::failbit|ios::eofbit);
- else
- _gcount = count;
- }
- *** 1.1 1992/03/22 07:42:32
- --- indstrea.cc 1993/02/22 17:06:34
- ***************
- *** 35,51 ****
- if (_delete_flags & ios::out) delete put_stream();
- }
-
- ! int indirectbuf::sputn(const char* s, int n)
- {
- return put_stream()->sputn(s, n);
- }
-
- ! int indirectbuf::sgetn(char* s, int n)
- {
- return get_stream()->sgetn(s, n);
- }
-
- ! int indirectbuf::overflow(int c = EOF)
- {
- if (c == EOF)
- return put_stream()->overflow(c);
- --- 35,51 ----
- if (_delete_flags & ios::out) delete put_stream();
- }
-
- ! _G_size_t indirectbuf::xsputn(const char* s, _G_size_t n)
- {
- return put_stream()->sputn(s, n);
- }
-
- ! _G_size_t indirectbuf::xsgetn(char* s, _G_size_t n)
- {
- return get_stream()->sgetn(s, n);
- }
-
- ! int indirectbuf::overflow(int c /* = EOF */)
- {
- if (c == EOF)
- return put_stream()->overflow(c);
- ***************
- *** 105,113 ****
- int indirectbuf::pbackfail(int c)
- {
- return get_stream()->sputbackc(c);
- - }
- -
- - int indirectbuf::ungetfail()
- - {
- - return get_stream()->sungetc();
- }
- --- 105,108 ----
- *** 1.2 1992/07/20 22:21:08
- --- iodtoa.cc 1993/02/22 17:06:34
- ***************
- *** 275,281 ****
-
- #define Kmax 15
-
- ! extern "C" double strtod(const char *s00, char **se);
- extern "C" char *dtoa(double d, int mode, int ndigits,
- int *decpt, int *sign, char **rve);
-
- --- 275,281 ----
-
- #define Kmax 15
-
- ! extern "C" double _Xstrtod(const char *s00, char **se);
- extern "C" char *dtoa(double d, int mode, int ndigits,
- int *decpt, int *sign, char **rve);
-
- ***************
- *** 1123,1129 ****
- #endif
-
- double
- ! strtod
- #ifdef KR_headers
- (s00, se) CONST char *s00; char **se;
- #else
- --- 1123,1129 ----
- #endif
-
- double
- ! _Xstrtod
- #ifdef KR_headers
- (s00, se) CONST char *s00; char **se;
- #else
- ***************
- *** 2397,2403 ****
- #ifdef atarist
- double atof(const char *s)
- {
- ! return strtod(s, (char **)NULL);
- }
- #endif
-
- --- 2397,2403 ----
- #ifdef atarist
- double atof(const char *s)
- {
- ! return _Xstrtod(s, (char **)NULL);
- }
- #endif
-
- *** 1.8 1992/12/11 19:39:04
- --- iostream.cc 1993/02/22 17:06:35
- ***************
- *** 1,5 ****
- // This is part of the iostream library, providing input/output for C++.
- ! // Copyright (C) 1991 Per Bothner.
- //
- // This library is free software; you can redistribute it and/or
- // modify it under the terms of the GNU Library General Public
- --- 1,5 ----
- // This is part of the iostream library, providing input/output for C++.
- ! // Copyright (C) 1991, 1992 Per Bothner.
- //
- // This library is free software; you can redistribute it and/or
- // modify it under the terms of the GNU Library General Public
- ***************
- *** 23,28 ****
- --- 23,29 ----
- #include <iostream.h>
- #include <stdio.h> /* Needed for sprintf */
- #include <ctype.h>
- + #include <limits.h>
- #include <floatio.h>
-
- #define BUF (MAXEXP+MAXFRACT+1) /* + decimal point */
- ***************
- *** 29,36 ****
-
- //#define isspace(ch) ((ch)==' ' || (ch)=='\t' || (ch)=='\n')
-
- - extern backupbuf not_open_filebuf;
- -
- istream::istream(streambuf *sb, ostream* tied) : ios(sb, tied)
- {
- _flags |= ios::dont_close;
- --- 30,35 ----
- ***************
- *** 57,64 ****
- return *this;
- }
-
- ! istream& istream::ignore(int n=1, int delim = EOF)
- {
- if (ipfx1()) {
- register streambuf* sb = _strbuf;
- if (delim == EOF) {
- --- 56,64 ----
- return *this;
- }
-
- ! istream& istream::ignore(_G_size_t n1 /* = 1 */, int delim /* = EOF */)
- {
- + long n = n1;
- if (ipfx1()) {
- register streambuf* sb = _strbuf;
- if (delim == EOF) {
- ***************
- *** 85,91 ****
- return *this;
- }
-
- ! istream& istream::read(char *s, size_t n)
- {
- if (ipfx1()) {
- _gcount = _strbuf->sgetn(s, n);
- --- 85,91 ----
- return *this;
- }
-
- ! istream& istream::read(char *s, _G_size_t n)
- {
- if (ipfx1()) {
- _gcount = _strbuf->sgetn(s, n);
- ***************
- *** 124,130 ****
- if (ipfx0()) {
- va_list ap;
- va_start(ap, format);
- ! _strbuf->vscan(format, ap, &_state);
- va_end(ap);
- }
- return *this;
- --- 124,130 ----
- if (ipfx0()) {
- va_list ap;
- va_start(ap, format);
- ! _strbuf->vscan(format, ap, this);
- va_end(ap);
- }
- return *this;
- ***************
- *** 133,168 ****
- istream& istream::vscan(const char *format, _G_va_list args)
- {
- if (ipfx0())
- ! _strbuf->vscan(format, args, &_state);
- return *this;
- }
-
- ! istream& operator>>(istream& is, char& c)
- {
- ! if (is.ipfx0()) {
- ! int ch = is._strbuf->sbumpc();
- if (ch == EOF)
- ! is.set(ios::eofbit|ios::failbit);
- else
- c = (char)ch;
- }
- ! return is;
- }
-
- ! istream& operator>>(istream& is, char* ptr)
- {
- ! if (is.ipfx0()) {
- ! register streambuf* sb = is._strbuf;
- int ch = sb->sbumpc();
- if (ch == EOF)
- ! is.set(ios::eofbit|ios::failbit);
- else {
- ! int w = is.width(0);
- ! *ptr++ = ch;
- for (;;) {
- ch = sb->sbumpc();
- if (ch == EOF) {
- ! is.set(ios::eofbit|ios::failbit);
- break;
- }
- else if (isspace(ch)) {
- --- 133,168 ----
- istream& istream::vscan(const char *format, _G_va_list args)
- {
- if (ipfx0())
- ! _strbuf->vscan(format, args, this);
- return *this;
- }
-
- ! istream& istream::operator>>(char& c)
- {
- ! if (ipfx0()) {
- ! int ch = _strbuf->sbumpc();
- if (ch == EOF)
- ! set(ios::eofbit|ios::failbit);
- else
- c = (char)ch;
- }
- ! return *this;
- }
-
- ! istream& istream::operator>>(char* ptr)
- {
- ! if (ipfx0()) {
- ! register streambuf* sb = _strbuf;
- int ch = sb->sbumpc();
- if (ch == EOF)
- ! set(ios::eofbit|ios::failbit);
- else {
- ! int w = width(0);
- ! sb->sputbackc(ch);
- for (;;) {
- ch = sb->sbumpc();
- if (ch == EOF) {
- ! set(ios::eofbit);
- break;
- }
- else if (isspace(ch)) {
- ***************
- *** 170,176 ****
- break;
- }
- else if (w == 1) {
- ! is.set(ios::failbit);
- sb->sputbackc(ch);
- break;
- }
- --- 170,176 ----
- break;
- }
- else if (w == 1) {
- ! set(ios::failbit);
- sb->sputbackc(ch);
- break;
- }
- ***************
- *** 180,189 ****
- }
- }
- *ptr = '\0';
- ! return is;
- }
-
- ! static int read_int(istream& stream, unsigned long& val, int& neg)
- {
- if (!stream.ipfx0())
- return 0;
- --- 180,195 ----
- }
- }
- *ptr = '\0';
- ! return *this;
- }
-
- ! #if defined(__GNUC__) && (!defined(atarist))
- ! #define LONGEST long long
- ! #else
- ! #define LONGEST long
- ! #endif
- !
- ! static int read_int(istream& stream, unsigned LONGEST& val, int& neg)
- {
- if (!stream.ipfx0())
- return 0;
- ***************
- *** 202,208 ****
- ch = skip_ws(sb);
- }
- if (ch == EOF) goto eof_fail;
- ! if (!(stream.flags() & (ios::hex|ios::dec|ios::oct))) {
- if (ch == '0') {
- ch = sb->sbumpc();
- if (ch == EOF) {
- --- 208,214 ----
- ch = skip_ws(sb);
- }
- if (ch == EOF) goto eof_fail;
- ! if (!(stream.flags() & ios::basefield)) {
- if (ch == '0') {
- ch = sb->sbumpc();
- if (ch == EOF) {
- ***************
- *** 221,229 ****
- }
- }
- }
- ! else if (stream.flags() & ios::hex)
- base = 16;
- ! else if (stream.flags() & ios::oct)
- base = 8;
- val = 0;
- for (;;) {
- --- 227,235 ----
- }
- }
- }
- ! else if ((stream.flags() & ios::basefield) == ios::hex)
- base = 16;
- ! else if ((stream.flags() & ios::basefield) == ios::oct)
- base = 8;
- val = 0;
- for (;;) {
- ***************
- *** 259,272 ****
- }
-
- #define READ_INT(TYPE) \
- ! istream& operator>>(istream& is, TYPE& i)\
- {\
- ! unsigned long val; int neg;\
- ! if (read_int(is, val, neg)) {\
- if (neg) val = -val;\
- i = (TYPE)val;\
- }\
- ! return is;\
- }
-
- READ_INT(short)
- --- 265,278 ----
- }
-
- #define READ_INT(TYPE) \
- ! istream& istream::operator>>(TYPE& i)\
- {\
- ! unsigned LONGEST val; int neg;\
- ! if (read_int(*this, val, neg)) {\
- if (neg) val = -val;\
- i = (TYPE)val;\
- }\
- ! return *this;\
- }
-
- READ_INT(short)
- ***************
- *** 275,365 ****
- READ_INT(unsigned int)
- READ_INT(long)
- READ_INT(unsigned long)
-
- ! istream& operator>>(istream& is, double& x)
- {
- ! if (is.ipfx0()) {
- ! is.scan("%lg", &x);
- ! }
- ! return is;
- }
- ! istream& operator>>(istream& is, float& x)
- {
- ! if (is.ipfx0()) {
- ! is.scan("%g", &x);
- ! }
- ! return is;
- }
-
- ! istream& operator>>(istream& is, register streambuf* sbuf)
- {
- ! if (is.ipfx0()) {
- ! register streambuf* inbuf = is.rdbuf();
- // FIXME: Should optimize!
- for (;;) {
- register int ch = inbuf->sbumpc();
- if (ch == EOF) {
- ! is.set(ios::eofbit);
- break;
- }
- if (sbuf->sputc(ch) == EOF) {
- ! is.set(ios::failbit);
- break;
- }
- }
- }
- ! return is;
- }
-
- ! ostream& operator<<(ostream& os, char c)
- {
- ! if (os.opfx()) {
- ! int w = os.width(0);
- ! char fill_char = os.fill();
- register int padding = w > 0 ? w - 1 : 0;
- ! register streambuf *sb = os._strbuf;
- ! if (!(os.flags() & ios::left)) // Default adjustment.
- while (--padding >= 0) sb->sputc(fill_char);
- sb->sputc(c);
- ! if (os.flags() & ios::left) // Left adjustment.
- while (--padding >= 0) sb->sputc(fill_char);
- ! os.osfx();
- }
- ! return os;
- }
-
- ! void write_int(ostream& stream, unsigned long val, int neg)
- {
- ! char buf[10 + sizeof(unsigned long) * 3];
- char *show_base = "";
- int show_base_len = 0;
- ! if ((stream.flags() & (ios::oct|ios::hex)) == 0) // Decimal
- ! sprintf(buf, "%lu", val);
- ! else if (stream.flags() & ios::oct) { // Oct
- ! sprintf(buf, "%lo", val);
- ! if (stream.flags() & ios::showbase)
- show_base = "0", show_base_len = 1;
- }
- ! else if (stream.flags() & ios::uppercase) {// Hex
- ! sprintf(buf, "%lX", val);
- ! if (stream.flags() & ios::showbase)
- ! show_base = "0X", show_base_len = 2;
- ! }
- ! else { // Hex
- ! sprintf(buf, "%lx", val);
- ! if (stream.flags() & ios::showbase)
- ! show_base = "0x", show_base_len = 2;
- }
- ! int buf_len = strlen(buf);
- int w = stream.width(0);
- - int show_pos = 0;
-
- // Calculate padding.
- ! int len = buf_len;
- ! if (neg) len++;
- ! else if (val != 0 && (stream.flags() & ios::showpos)) len++, show_pos=1;
- len += show_base_len;
- ! int padding = len > w ? 0 : w - len;
-
- // Do actual output.
- register streambuf* sbuf = stream.rdbuf();
- --- 281,407 ----
- READ_INT(unsigned int)
- READ_INT(long)
- READ_INT(unsigned long)
- + #ifdef __GNUG__
- + READ_INT(long long)
- + READ_INT(unsigned long long)
- + #endif
-
- ! istream& istream::operator>>(double& x)
- {
- ! if (ipfx0())
- ! scan("%lg", &x);
- ! return *this;
- }
- !
- ! istream& istream::operator>>(float& x)
- {
- ! if (ipfx0())
- ! scan("%g", &x);
- ! return *this;
- }
-
- ! istream& istream::operator>>(register streambuf* sbuf)
- {
- ! if (ipfx0()) {
- ! register streambuf* inbuf = rdbuf();
- // FIXME: Should optimize!
- for (;;) {
- register int ch = inbuf->sbumpc();
- if (ch == EOF) {
- ! set(ios::eofbit);
- break;
- }
- if (sbuf->sputc(ch) == EOF) {
- ! set(ios::failbit);
- break;
- }
- }
- }
- ! return *this;
- }
-
- ! ostream& ostream::operator<<(char c)
- {
- ! if (opfx()) {
- ! int w = width(0);
- ! char fill_char = fill();
- register int padding = w > 0 ? w - 1 : 0;
- ! register streambuf *sb = _strbuf;
- ! if (!(flags() & ios::left)) // Default adjustment.
- while (--padding >= 0) sb->sputc(fill_char);
- sb->sputc(c);
- ! if (flags() & ios::left) // Left adjustment.
- while (--padding >= 0) sb->sputc(fill_char);
- ! osfx();
- }
- ! return *this;
- }
-
- ! /* Write VAL on STREAM.
- ! If SIGN<0, val is the absolute value of a negative number.
- ! If SIGN>0, val is a signed non-negative number.
- ! If SIGN==0, val is unsigned. */
- !
- ! static void write_int(ostream& stream, unsigned LONGEST val, int sign)
- {
- ! #define WRITE_BUF_SIZE (10 + sizeof(unsigned LONGEST) * 3)
- ! char buf[WRITE_BUF_SIZE];
- ! register char *buf_ptr = buf+WRITE_BUF_SIZE; // End of buf.
- char *show_base = "";
- int show_base_len = 0;
- ! int show_pos = 0; // If 1, print a '+'.
- !
- ! // Now do the actual conversion, placing the result at the *end* of buf.
- ! // Note that we use separate code for decimal, octal, and hex,
- ! // so we can divide by optimizable constants.
- ! if ((stream.flags() & ios::basefield) == ios::oct) { // Octal
- ! if ((stream.flags() & ios::showbase) && (val != 0))
- show_base = "0", show_base_len = 1;
- + do {
- + *--buf_ptr = (val & 7) + '0';
- + val = val >> 3;
- + } while (val != 0);
- + }
- + else if ((stream.flags() & ios::basefield) == ios::hex) { // Hex
- + char *xdigs = (stream.flags() & ios::uppercase) ? "0123456789ABCDEF0X"
- + : "0123456789abcdef0x";
- + do {
- + *--buf_ptr = xdigs[val & 15];
- + val = val >> 4;
- + } while (val != 0);
- + if (stream.flags() & ios::showbase) {
- + show_base = xdigs + 16; // Either "0X" or "0x".
- + show_base_len = 2;
- + }
- }
- ! else { // Decimal
- ! if (val != 0 && sign > 0 && (stream.flags() & ios::showpos))
- ! show_pos=1;
- ! #ifdef __GNUC__
- ! // Optimization: Only use long long when we need to.
- ! while (val > UINT_MAX) {
- ! *--buf_ptr = (val % 10) + '0';
- ! val /= 10;
- ! }
- ! // Use more efficient (int) arithmetic for the rest.
- ! register unsigned int ival = (unsigned int)val;
- ! #else
- ! register unsigned LONGEST ival = val;
- ! #endif
- ! do {
- ! *--buf_ptr = (ival % 10) + '0';
- ! ival /= 10;
- ! } while (ival != 0);
- }
- !
- ! _G_size_t buf_len = buf+WRITE_BUF_SIZE - buf_ptr;
- int w = stream.width(0);
-
- // Calculate padding.
- ! _G_size_t len = buf_len+show_pos;
- ! if (sign < 0) len++;
- len += show_base_len;
- ! _G_size_t padding = len > w ? 0 : w - len;
-
- // Do actual output.
- register streambuf* sbuf = stream.rdbuf();
- ***************
- *** 370,450 ****
- && pad_kind != (ios::fmtflags)ios::left
- && pad_kind != (ios::fmtflags)ios::internal) // Default (right) adjust.
- sbuf->padn(fill_char, padding);
- ! if (neg) sbuf->sputc('-');
- else if (show_pos) sbuf->sputc('+');
- if (show_base_len)
- sbuf->sputn(show_base, show_base_len);
- if (pad_kind == (ios::fmtflags)ios::internal && padding > 0)
- sbuf->padn(fill_char, padding);
- ! sbuf->sputn(buf, buf_len);
- if (pad_kind == (ios::fmtflags)ios::left && padding > 0) // Left adjustment
- sbuf->padn(fill_char, padding);
- stream.osfx();
- }
-
- ! ostream& operator<<(ostream& os, int n)
- {
- ! if (os.opfx()) {
- ! int neg = 0;
- ! if (n < 0 && (os.flags() & (ios::oct|ios::hex)) == 0)
- ! n = -n, neg = 1;
- ! write_int(os, n, neg);
- }
- ! return os;
- }
-
- ! ostream& operator<<(ostream& os, long n)
- {
- ! if (os.opfx()) {
- ! int neg = 0;
- ! if (n < 0 && (os.flags() & (ios::oct|ios::hex)) == 0)
- ! n = -n, neg = 1;
- ! write_int(os, n, neg);
- }
- ! return os;
- }
-
- ! ostream& operator<<(ostream& os, unsigned int n)
- {
- ! if (os.opfx())
- ! write_int(os, n, 0);
- ! return os;
- }
-
- ! ostream& operator<<(ostream& os, unsigned long n)
- {
- ! if (os.opfx())
- ! write_int(os, n, 0);
- ! return os;
- }
-
- ! ostream& operator<<(ostream& os, float n)
- {
- ! return os << (double)n;
- }
-
- ! ostream& operator<<(ostream& os, double n)
- {
- ! if (os.opfx()) {
- // Uses __cvt_double (renamed from static cvt), in Chris Torek's
- // stdio implementation. The setup code uses the same logic
- // as in __vsbprintf.C (also based on Torek's code).
- int format_char;
- #if 0
- ! if (os.flags() ios::showpos) sign = '+';
- #endif
- ! if (os.flags() & ios::fixed)
- format_char = 'f';
- ! else if (os.flags() & ios::scientific)
- ! format_char = os.flags() & ios::uppercase ? 'E' : 'e';
- else
- ! format_char = os.flags() & ios::uppercase ? 'G' : 'g';
-
- int fpprec = 0; // 'Extra' (suppressed) floating precision.
- ! int prec = os.precision();
- if (prec < 0) prec = 6; // default.
- else if (prec > MAXFRACT) {
- ! if (os.flags() & (ios::fixed|ios::scientific) & ios::showpos)
- fpprec = prec - MAXFRACT;
- prec = MAXFRACT;
- }
- --- 412,509 ----
- && pad_kind != (ios::fmtflags)ios::left
- && pad_kind != (ios::fmtflags)ios::internal) // Default (right) adjust.
- sbuf->padn(fill_char, padding);
- ! if (sign < 0) sbuf->sputc('-');
- else if (show_pos) sbuf->sputc('+');
- if (show_base_len)
- sbuf->sputn(show_base, show_base_len);
- if (pad_kind == (ios::fmtflags)ios::internal && padding > 0)
- sbuf->padn(fill_char, padding);
- ! sbuf->sputn(buf_ptr, buf_len);
- if (pad_kind == (ios::fmtflags)ios::left && padding > 0) // Left adjustment
- sbuf->padn(fill_char, padding);
- stream.osfx();
- }
-
- ! ostream& ostream::operator<<(int n)
- {
- ! if (opfx()) {
- ! int sign = 1;
- ! if (n < 0 && (flags() & (ios::oct|ios::hex)) == 0)
- ! n = -n, sign = -1;
- ! write_int(*this, n, sign);
- }
- ! return *this;
- ! }
- !
- ! ostream& ostream::operator<<(unsigned int n)
- ! {
- ! if (opfx())
- ! write_int(*this, n, 0);
- ! return *this;
- }
-
- !
- ! ostream& ostream::operator<<(long n)
- {
- ! if (opfx()) {
- ! int sign = 1;
- ! if (n < 0 && (flags() & (ios::oct|ios::hex)) == 0)
- ! n = -n, sign = -1;
- ! write_int(*this, n, sign);
- }
- ! return *this;
- }
-
- ! ostream& ostream::operator<<(unsigned long n)
- {
- ! if (opfx())
- ! write_int(*this, n, 0);
- ! return *this;
- }
-
- ! #ifdef __GNUG__
- ! ostream& ostream::operator<<(long long n)
- {
- ! if (opfx()) {
- ! int sign = 1;
- ! if (n < 0 && (flags() & (ios::oct|ios::hex)) == 0)
- ! n = -n, sign = -1;
- ! write_int(*this, n, sign);
- ! }
- ! return *this;
- }
-
- !
- ! ostream& ostream::operator<<(unsigned long long n)
- {
- ! if (opfx())
- ! write_int(*this, n, 0);
- ! return *this;
- }
- + #endif /*__GNUG__*/
-
- ! ostream& ostream::operator<<(double n)
- {
- ! if (opfx()) {
- // Uses __cvt_double (renamed from static cvt), in Chris Torek's
- // stdio implementation. The setup code uses the same logic
- // as in __vsbprintf.C (also based on Torek's code).
- int format_char;
- #if 0
- ! if (flags() ios::showpos) sign = '+';
- #endif
- ! if ((flags() & ios::floatfield) == ios::fixed)
- format_char = 'f';
- ! else if ((flags() & ios::floatfield) == ios::scientific)
- ! format_char = flags() & ios::uppercase ? 'E' : 'e';
- else
- ! format_char = flags() & ios::uppercase ? 'G' : 'g';
-
- int fpprec = 0; // 'Extra' (suppressed) floating precision.
- ! int prec = precision();
- if (prec < 0) prec = 6; // default.
- else if (prec > MAXFRACT) {
- ! if (flags() & (ios::fixed|ios::scientific) & ios::showpos)
- fpprec = prec - MAXFRACT;
- prec = MAXFRACT;
- }
- ***************
- *** 451,459 ****
-
- // Do actual conversion.
- #ifdef USE_DTOA
- ! if (__outfloat(n, os.rdbuf(), format_char, os.width(0),
- ! os.precision(), os.flags(), 0, os.fill()) < 0)
- ! os.set(ios::badbit|ios::failbit); // ??
- #else
- int negative;
- char buf[BUF];
- --- 510,518 ----
-
- // Do actual conversion.
- #ifdef USE_DTOA
- ! if (__outfloat(n, rdbuf(), format_char, width(0),
- ! precision(), flags(), 0, fill()) < 0)
- ! set(ios::badbit|ios::failbit); // ??
- #else
- int negative;
- char buf[BUF];
- ***************
- *** 460,467 ****
- int sign = '\0';
- char *cp = buf;
- *cp = 0;
- ! int size = __cvt_double(n, os.precision(),
- ! os.flags() & ios::showpoint ? 0x80 : 0,
- &negative,
- format_char, cp, buf + sizeof(buf));
- if (negative) sign = '-';
- --- 519,526 ----
- int sign = '\0';
- char *cp = buf;
- *cp = 0;
- ! int size = __cvt_double(n, precision(),
- ! flags() & ios::showpoint ? 0x80 : 0,
- &negative,
- format_char, cp, buf + sizeof(buf));
- if (negative) sign = '-';
- ***************
- *** 472,487 ****
- int fieldsize = size + fpprec;
- if (sign) fieldsize++;
- int padding = 0;
- ! int w = os.width(0);
- if (fieldsize < w)
- padding = w - fieldsize;
-
- // Do actual output.
- ! register streambuf* sbuf = os.rdbuf();
- register i;
- ! char fill_char = os.fill();
- ios::fmtflags pad_kind =
- ! os.flags() & (ios::left|ios::right|ios::internal);
- if (pad_kind != (ios::fmtflags)ios::left // Default (right) adjust.
- && pad_kind != (ios::fmtflags)ios::internal)
- for (i = padding; --i >= 0; ) sbuf->sputc(fill_char);
- --- 531,546 ----
- int fieldsize = size + fpprec;
- if (sign) fieldsize++;
- int padding = 0;
- ! int w = width(0);
- if (fieldsize < w)
- padding = w - fieldsize;
-
- // Do actual output.
- ! register streambuf* sbuf = rdbuf();
- register i;
- ! char fill_char = fill();
- ios::fmtflags pad_kind =
- ! flags() & (ios::left|ios::right|ios::internal);
- if (pad_kind != (ios::fmtflags)ios::left // Default (right) adjust.
- && pad_kind != (ios::fmtflags)ios::internal)
- for (i = padding; --i >= 0; ) sbuf->sputc(fill_char);
- ***************
- *** 497,550 ****
- if (pad_kind == (ios::fmtflags)ios::left) // Left adjustment
- for (i = padding; --i >= 0; ) sbuf->sputc(fill_char);
- #endif
- ! os.osfx();
- }
- ! return os;
- }
-
- ! ostream& operator<<(ostream& stream, const char *s)
- {
- ! if (stream.opfx()) {
- ! size_t len = strlen(s);
- ! int w = stream.width(0);
- ! char fill_char = stream.fill();
- ! register streambuf *sbuf = stream.rdbuf();
- register int padding = w > len ? w - len : 0;
- ! if (!(stream.flags() & ios::left)) // Default adjustment.
- while (--padding >= 0) sbuf->sputc(fill_char);
- sbuf->sputn(s, len);
- ! if (stream.flags() & ios::left) // Left adjustment.
- while (--padding >= 0) sbuf->sputc(fill_char);
- ! stream.osfx();
- }
- ! return stream;
- }
-
- ! ostream& operator<<(ostream& os, void *p)
- {
- ! if (os.opfx()) {
- ! os.form("%p", p);
- ! os.osfx();
- }
- ! return os;
- }
-
- ! ostream& operator<<(ostream& os, register streambuf* sbuf)
- {
- ! if (os.opfx()) {
- ! register streambuf* outbuf = os.rdbuf();
- // FIXME: Should optimize!
- for (;;) {
- register int ch = sbuf->sbumpc();
- if (ch == EOF) break;
- if (outbuf->sputc(ch) == EOF) {
- ! os.set(ios::badbit);
- break;
- }
- }
- ! os.osfx();
- }
- ! return os;
- }
-
- ostream::ostream(streambuf* sb, ostream* tied) : ios(sb, tied)
- --- 556,611 ----
- if (pad_kind == (ios::fmtflags)ios::left) // Left adjustment
- for (i = padding; --i >= 0; ) sbuf->sputc(fill_char);
- #endif
- ! osfx();
- }
- ! return *this;
- }
-
- ! ostream& ostream::operator<<(const char *s)
- {
- ! if (opfx()) {
- ! if (s == NULL)
- ! s = "(null)";
- ! _G_size_t len = strlen(s);
- ! int w = width(0);
- ! char fill_char = fill();
- ! register streambuf *sbuf = rdbuf();
- register int padding = w > len ? w - len : 0;
- ! if (!(flags() & ios::left)) // Default adjustment.
- while (--padding >= 0) sbuf->sputc(fill_char);
- sbuf->sputn(s, len);
- ! if (flags() & ios::left) // Left adjustment.
- while (--padding >= 0) sbuf->sputc(fill_char);
- ! osfx();
- }
- ! return *this;
- }
-
- ! ostream& ostream::operator<<(void *p)
- {
- ! if (opfx()) {
- ! form("%p", p);
- ! osfx();
- }
- ! return *this;
- }
-
- ! ostream& ostream::operator<<(register streambuf* sbuf)
- {
- ! if (opfx()) {
- ! register streambuf* outbuf = rdbuf();
- // FIXME: Should optimize!
- for (;;) {
- register int ch = sbuf->sbumpc();
- if (ch == EOF) break;
- if (outbuf->sputc(ch) == EOF) {
- ! set(ios::badbit);
- break;
- }
- }
- ! osfx();
- }
- ! return *this;
- }
-
- ostream::ostream(streambuf* sb, ostream* tied) : ios(sb, tied)
- ***************
- *** 647,653 ****
- return flush(outs.put('\n'));
- }
-
- ! ostream& ostream::write(const char *s, size_t n)
- {
- if (opfx()) {
- if (_strbuf->sputn(s, n) != n)
- --- 708,714 ----
- return flush(outs.put('\n'));
- }
-
- ! ostream& ostream::write(const char *s, _G_size_t n)
- {
- if (opfx()) {
- if (_strbuf->sputn(s, n) != n)
- ***************
- *** 666,676 ****
- }
- }
-
- - const unsigned long ios::basefield = ios::hex|ios::oct|ios::dec;
- - const unsigned long ios::floatfield = ios::scientific|ios::fixed;
- - const unsigned long ios::adjustfield =
- - ios::left|ios::right|ios::internal;
- -
- iostream::iostream(streambuf* sb, ostream* tied) : ios(sb, tied)
- {
- _flags |= ios::dont_close;
- --- 727,732 ----
- ***************
- *** 677,701 ****
- _gcount = 0;
- }
-
- - ostream& iostream::form(const char *format ...) // Copy of ostream::form.
- - {
- - va_list ap;
- - va_start(ap, format);
- - _strbuf->vform(format, ap);
- - va_end(ap);
- - return *(ostream*)this;
- - }
- - istream& iostream::scan(const char *format ...) // Copy of istream::scan
- - {
- - if (ipfx0()) {
- - va_list ap;
- - va_start(ap, format);
- - _strbuf->vscan(format, ap, &_state);
- - va_end(ap);
- - }
- - return *(istream *)this;
- - }
- -
- // NOTE: extension for compatibility with old libg++.
- // Not really compatible with fistream::close().
- #ifdef _STREAM_COMPAT
- --- 733,738 ----
- ***************
- *** 705,717 ****
- delete _strbuf;
- else if (_strbuf->_flags & _S_IS_FILEBUF)
- ((struct filebuf*)_strbuf)->close();
- ! else if (_strbuf != ¬_open_filebuf)
- _strbuf->sync();
- _flags |= ios::dont_close;
- ! _strbuf = ¬_open_filebuf;
- }
-
- ! int istream::skip(int i)
- {
- int old = (_flags & ios::skipws) != 0;
- if (i)
- --- 742,755 ----
- delete _strbuf;
- else if (_strbuf->_flags & _S_IS_FILEBUF)
- ((struct filebuf*)_strbuf)->close();
- ! else if (_strbuf != NULL)
- _strbuf->sync();
- _flags |= ios::dont_close;
- ! _strbuf = NULL;
- ! _state = badbit;
- }
-
- ! int istream::skip(_G_size_t i)
- {
- int old = (_flags & ios::skipws) != 0;
- if (i)
- *** 1.4 1992/06/03 02:12:17
- --- makebuf.cc 1993/02/22 17:06:35
- ***************
- *** 27,33 ****
- #include <sys/stat.h>
-
- #ifdef atarist
- ! extern "C" extern unsigned long __DEFAULT_BUFSIZ__;
- #undef BUFSIZ
- #define BUFSIZ __DEFAULT_BUFSIZ__
- #endif
- --- 27,33 ----
- #include <sys/stat.h>
-
- #ifdef atarist
- ! extern "C" unsigned long __DEFAULT_BUFSIZ__;
- #undef BUFSIZ
- #define BUFSIZ __DEFAULT_BUFSIZ__
- #endif
- ***************
- *** 65,71 ****
- #endif
- }
- #ifdef USE_MALLOC_BUF
- ! if ((p = malloc(size)) == NULL) {
- unbuffered(1);
- // fp->_bf._base = fp->_p = fp->_nbuf;
- // fp->_bf._size = 1;
- --- 65,71 ----
- #endif
- }
- #ifdef USE_MALLOC_BUF
- ! if ((p = (char *)malloc(size)) == NULL) {
- unbuffered(1);
- // fp->_bf._base = fp->_p = fp->_nbuf;
- // fp->_bf._size = 1;
- *** 1.10 1992/12/28 07:35:55
- --- mincl 1993/02/22 17:06:36
- ***************
- *** 18,24 ****
- IOSRC = editbuf.cc filebuf.cc fstream.cc igetline.cc indstrea.cc iostream.cc \
- makebuf.cc parsestr.cc sbufvfor.cc sbufvsca.cc sgetline.cc stdstrbu.cc \
- stdstrea.cc stream.cc streambu.cc strstrea.cc xplotfil.cc xsfile.cc \
- ! igetsb.cc iodtoa.cc outfloat.cc
-
- #
- # NOTE:: dummy[12].o MUST be the last objects on this list. otherwise you'll
- --- 18,24 ----
- IOSRC = editbuf.cc filebuf.cc fstream.cc igetline.cc indstrea.cc iostream.cc \
- makebuf.cc parsestr.cc sbufvfor.cc sbufvsca.cc sgetline.cc stdstrbu.cc \
- stdstrea.cc stream.cc streambu.cc strstrea.cc xplotfil.cc xsfile.cc \
- ! igetsb.cc iodtoa.cc outfloat.cc iomanip.cc stdiostr.cc
-
- #
- # NOTE:: dummy[12].o MUST be the last objects on this list. otherwise you'll
- ***************
- *** 64,70 ****
- _bin_del.o: gnuaux.c
- $(CC) -c $(CFLAGS) -DL_builtin_del $^ -o $@
-
- ! # dont ask me why, but with gcc 2.3.1 and 2.3.2 -fomit-frame-pointer
- # breaks xbitset
- xbitset.o: xbitset.cc
- $(GXX) $(GXXFFLAGS) -c xbitset.cc
- --- 64,70 ----
- _bin_del.o: gnuaux.c
- $(CC) -c $(CFLAGS) -DL_builtin_del $^ -o $@
-
- ! # dont ask me why, but with gcc 2.3.1 and 2.3.2/3 -fomit-frame-pointer
- # breaks xbitset
- xbitset.o: xbitset.cc
- $(GXX) $(GXXFFLAGS) -c xbitset.cc
- *** 1.2 1992/07/20 22:21:08
- --- outfloat.cc 1993/02/22 17:06:36
- ***************
- *** 17,22 ****
- --- 17,25 ----
-
- #include <ioprivat.h>
-
- + // Format floating-point number and print them.
- + // Return number of chars printed, or EOF on error.
- +
- // sign_mode == '+' : print "-" or "+"
- // sign_mode == ' ' : print "-" or " "
- // sign_mode == '\0' : print "-' or ""
- ***************
- *** 25,37 ****
- int width, int precision, ios::fmtflags flags,
- char sign_mode, char fill)
- {
- ! #define PUT(x) do {if (sb->sputc(x) < 0) goto error;} while (0)
- #define PUTN(p, n) \
- ! do {int __n=n;if (sb->sputn(p, __n) != __n) goto error;} while (0)
- ! #define PADN(fill, n) do {if (sb->padn(fill, n) < 0) goto error;} while (0)
- ios::fmtflags pad_kind = flags & (ios::left|ios::right|ios::internal);
- int skip_zeroes = 0;
- ! int show_dot = flags & ios::showpoint;
- int decpt;
- int sign;
- int mode;
- --- 28,42 ----
- int width, int precision, ios::fmtflags flags,
- char sign_mode, char fill)
- {
- ! int count = 0;
- ! #define PUT(x) do {if (sb->sputc(x) < 0) goto error; count++;} while (0)
- #define PUTN(p, n) \
- ! do {_G_size_t _n=n; count+=_n; if (sb->sputn(p,_n) != _n) goto error;} while(0)
- ! #define PADN(fill, n) \
- ! do {_G_size_t _n = n; count+=_n; if (sb->padn(fill, _n) < 0) goto error;} while (0)
- ios::fmtflags pad_kind = flags & (ios::left|ios::right|ios::internal);
- int skip_zeroes = 0;
- ! int show_dot = (flags & ios::showpoint) != 0;
- int decpt;
- int sign;
- int mode;
- ***************
- *** 47,61 ****
- --- 52,69 ----
- case 'F':
- exp = 'e';
- mode = 0;
- + skip_zeroes = 1;
- type = 'g';
- break;
- case 'e':
- exp = 'e';
- mode = 2;
- + precision++; // Add one to include digit before decimal point.
- break;
- case 'E':
- exp = 'E';
- mode = 2;
- + precision++; // Add one to include digit before decimal point.
- break;
- case 'g':
- case 'G':
- ***************
- *** 75,81 ****
- // Check if we need to emit an exponent.
- if (mode != 3 && decpt != 9999) {
- i = decpt - 1;
- ! if ((type != 'g' && type != 'F') || i <= -4 || i >= precision) {
- // Print the exponent into ebuf.
- // We write ebuf in reverse order (right-to-left).
- char sign;
- --- 83,89 ----
- // Check if we need to emit an exponent.
- if (mode != 3 && decpt != 9999) {
- i = decpt - 1;
- ! if ((type != 'g' && type != 'F') || i < -4 || i >= precision) {
- // Print the exponent into ebuf.
- // We write ebuf in reverse order (right-to-left).
- char sign;
- ***************
- *** 104,114 ****
- precision = 0;
- show_dot = 0;
- }
- ! int trailing_zeroes = skip_zeroes ? 0 : precision-(useful_digits-decpt);
- if (trailing_zeroes < 0) trailing_zeroes = 0;
- if (trailing_zeroes != 0 || useful_digits > decpt)
- show_dot = 1;
- - int print_dot = 1;
- int print_sign;
- if (sign_mode == 0)
- print_sign = sign ? '-' : 0;
- --- 112,135 ----
- precision = 0;
- show_dot = 0;
- }
- !
- ! // dtoa truncates trailing zeroes. Set the variable trailing_zeroes to
- ! // the number of 0's we have to add (after the decimal point).
- ! int trailing_zeroes = 0;
- ! if (skip_zeroes)
- ! trailing_zeroes = 0;
- ! else if (type == 'f')
- ! trailing_zeroes = useful_digits <= decpt ? precision
- ! : precision-(useful_digits-decpt);
- ! else if (exponent_size) // 'e' 'E' or 'g' format using exponential notation.
- ! trailing_zeroes = precision - useful_digits;
- ! else // 'g' format not using exponential notation.
- ! trailing_zeroes = useful_digits <= decpt ? precision - decpt
- ! : precision-useful_digits;
- if (trailing_zeroes < 0) trailing_zeroes = 0;
- +
- if (trailing_zeroes != 0 || useful_digits > decpt)
- show_dot = 1;
- int print_sign;
- if (sign_mode == 0)
- print_sign = sign ? '-' : 0;
- ***************
- *** 147,156 ****
- }
- else {
- PUT('0');
- ! PUT('.');
- ! PADN('0', -decpt);
- ! // Print digits after the decimal point.
- ! PUTN(p, useful_digits);
- }
- PADN('0', trailing_zeroes);
- if (exponent_size)
- --- 168,179 ----
- }
- else {
- PUT('0');
- ! if (show_dot) {
- ! PUT('.');
- ! PADN('0', -decpt);
- ! // Print digits after the decimal point.
- ! PUTN(p, useful_digits);
- ! }
- }
- PADN('0', trailing_zeroes);
- if (exponent_size)
- ***************
- *** 157,163 ****
- PUTN(exponent_start, exponent_size);
- if (pad_kind == (ios::fmtflags)ios::left && padding > 0) // Left adjustment
- PADN(fill, padding);
- ! return 0;
- error:
- return EOF;
- }
- --- 180,186 ----
- PUTN(exponent_start, exponent_size);
- if (pad_kind == (ios::fmtflags)ios::left && padding > 0) // Left adjustment
- PADN(fill, padding);
- ! return count;
- error:
- return EOF;
- }
- *** 1.3 1992/07/20 22:21:08
- --- parsestr.cc 1993/02/22 17:06:36
- ***************
- *** 21,32 ****
- #include <ioprivat.h>
- #include <parsestr.h>
-
- ! streambuf* parsebuf::setbuf(char*, size_t)
- {
- return NULL;
- }
-
- ! int parsebuf::tell_in_line()
- {
- return 0;
- }
- --- 21,32 ----
- #include <ioprivat.h>
- #include <parsestr.h>
-
- ! streambuf* parsebuf::setbuf(char*, _G_size_t)
- {
- return NULL;
- }
-
- ! long parsebuf::tell_in_line()
- {
- return 0;
- }
- ***************
- *** 67,74 ****
- // The get area (eback() .. egptr()) is the extended current line
- // (i.e. with the '\n' at either end, if these exist).
-
- ! string_parsebuf::string_parsebuf(char *buf, size_t len,
- ! int delete_at_close=0)
- : parsebuf()
- {
- setb(buf, buf+len, delete_at_close);
- --- 67,74 ----
- // The get area (eback() .. egptr()) is the extended current line
- // (i.e. with the '\n' at either end, if these exist).
-
- ! string_parsebuf::string_parsebuf(char *buf, _G_size_t len,
- ! int delete_at_close /* = 0*/)
- : parsebuf()
- {
- setb(buf, buf+len, delete_at_close);
- ***************
- *** 82,88 ****
- {
- register char* ptr = egptr(); // Point to end of current_line
- do {
- ! long int i = right() - ptr;
- if (i <= 0)
- return EOF;
- ptr++; i--; // Skip '\n'.
- --- 82,88 ----
- {
- register char* ptr = egptr(); // Point to end of current_line
- do {
- ! long i = right() - ptr;
- if (i <= 0)
- return EOF;
- ptr++; i--; // Skip '\n'.
- ***************
- *** 104,120 ****
- return ptr;
- }
-
- ! int string_parsebuf::tell_in_line()
- {
- ! int offset = gptr() - eback();
- if (__line_number > 0)
- offset--;
- return offset;
- }
-
- ! int string_parsebuf::seek_in_line(int i)
- {
- ! int delta = i - tell_in_line();
- gbump(delta); // FIXME: Needs error (bounds) checking!
- return i;
- }
- --- 104,120 ----
- return ptr;
- }
-
- ! long string_parsebuf::tell_in_line()
- {
- ! long offset = gptr() - eback();
- if (__line_number > 0)
- offset--;
- return offset;
- }
-
- ! long string_parsebuf::seek_in_line(long i)
- {
- ! long delta = i - tell_in_line();
- gbump(delta); // FIXME: Needs error (bounds) checking!
- return i;
- }
- ***************
- *** 126,132 ****
- {
- delete_buf = delete_arg_buf;
- sbuf = buf;
- ! size_t buf_size = 128;
- char* buffer = ALLOC_BUF(buf_size);
- setb(buffer, buffer+buf_size, 1);
- // setg(buffer, buffer, buffer);
- --- 126,132 ----
- {
- delete_buf = delete_arg_buf;
- sbuf = buf;
- ! _G_size_t buf_size = 128;
- char* buffer = ALLOC_BUF(buf_size);
- setb(buffer, buffer+buf_size, 1);
- // setg(buffer, buffer, buffer);
- ***************
- *** 151,157 ****
- if (ch == EOF)
- break;
- if (ptr == ebuf()) {
- ! size_t old_size = ebuf() - base();
- char *new_buffer = new char[old_size * 2];
- memcpy(new_buffer, base(), old_size);
- setb(new_buffer, new_buffer + 2 * old_size, 1);
- --- 151,157 ----
- if (ch == EOF)
- break;
- if (ptr == ebuf()) {
- ! _G_size_t old_size = ebuf() - base();
- char *new_buffer = new char[old_size * 2];
- memcpy(new_buffer, base(), old_size);
- setb(new_buffer, new_buffer + 2 * old_size, 1);
- ***************
- *** 178,192 ****
- return ret;
- }
-
- ! int general_parsebuf::tell_in_line()
- {
- ! size_t off = gptr() - base();
- if (__line_number > 1)
- off--; // Subtract 1 for '\n' from end of previous line.
- return off;
- }
-
- ! int general_parsebuf::seek_in_line(int i)
- {
- if (__line_number == 0)
- (void)general_parsebuf::underflow();
- --- 178,192 ----
- return ret;
- }
-
- ! long general_parsebuf::tell_in_line()
- {
- ! long off = gptr() - base();
- if (__line_number > 1)
- off--; // Subtract 1 for '\n' from end of previous line.
- return off;
- }
-
- ! long general_parsebuf::seek_in_line(long i)
- {
- if (__line_number == 0)
- (void)general_parsebuf::underflow();
- ***************
- *** 193,199 ****
- if (__line_number > 1)
- i++; // Add 1 for '\n' from end of previous line.
- if (i < 0) i = 0;
- ! size_t len = egptr() - eback();
- if (i > len) i = len;
- setg(base(), base() + i, egptr());
- return i;
- --- 193,199 ----
- if (__line_number > 1)
- i++; // Add 1 for '\n' from end of previous line.
- if (i < 0) i = 0;
- ! long len = egptr() - eback();
- if (i > len) i = len;
- setg(base(), base() + i, egptr());
- return i;
- ***************
- *** 210,216 ****
- backed_up_to_newline = 0;
- }
-
- ! int func_parsebuf::tell_in_line()
- {
- if (buf_start == NULL)
- return 0;
- --- 210,216 ----
- backed_up_to_newline = 0;
- }
-
- ! long func_parsebuf::tell_in_line()
- {
- if (buf_start == NULL)
- return 0;
- ***************
- *** 228,234 ****
- return buf_start;
- }
-
- ! int func_parsebuf::seek_in_line(int i)
- {
- if (i < 0) {
- // Back up to preceding '\n'.
- --- 228,234 ----
- return buf_start;
- }
-
- ! long func_parsebuf::seek_in_line(long i)
- {
- if (i < 0) {
- // Back up to preceding '\n'.
- ***************
- *** 238,244 ****
- return i;
- }
- backed_up_to_newline = 0;
- ! int line_length = buf_end-buf_start;
- if (i <= line_length) {
- setg(buf_start, buf_start+i, buf_end);
- return i;
- --- 238,244 ----
- return i;
- }
- backed_up_to_newline = 0;
- ! long line_length = buf_end-buf_start;
- if (i <= line_length) {
- setg(buf_start, buf_start+i, buf_end);
- return i;
- ***************
- *** 288,294 ****
- }
- #endif
-
- ! int parsebuf::seek_in_line(int i)
- {
- #if 1
- abort();
- --- 288,294 ----
- }
- #endif
-
- ! long parsebuf::seek_in_line(long i)
- {
- #if 1
- abort();
- ***************
- *** 296,302 ****
- #else
- if (i > 0) {
- size_t len = line_length();
- ! if ((unsigned)i > len) i = len;
- }
- else if (i < -1) i = -1;
- int new_pos = seekoff(pos_at_line_start + i, ios::beg);
- --- 296,302 ----
- #else
- if (i > 0) {
- size_t len = line_length();
- ! if ((unsigned long)i > len) i = len;
- }
- else if (i < -1) i = -1;
- int new_pos = seekoff(pos_at_line_start + i, ios::beg);
- *** 1.6 1992/07/20 22:21:08
- --- sbufvfor.cc 1993/02/22 17:06:37
- ***************
- *** 50,58 ****
- class help_streambuf : public backupbuf {
- public:
- char *buffer;
- ! size_t buf_size;
- streambuf *sb;
- ! help_streambuf(streambuf *sbuf, char *buf, size_t n) {
- sb = sbuf; buffer = buf; buf_size = n;
- setp(buffer, buffer+buf_size); }
- ~help_streambuf();
- --- 50,58 ----
- class help_streambuf : public backupbuf {
- public:
- char *buffer;
- ! _G_size_t buf_size;
- streambuf *sb;
- ! help_streambuf(streambuf *sbuf, char *buf, _G_size_t n) {
- sb = sbuf; buffer = buf; buf_size = n;
- setp(buffer, buffer+buf_size); }
- ~help_streambuf();
- ***************
- *** 136,148 ****
- #ifdef FLOATING_POINT
- int softsign; /* temporary negative sign for floats */
- double _double; /* double precision arguments %[eEfgG] */
- int fpprec; /* `extra' floating precision in [eEfgG] */
- #endif
- unsigned long _ulong; /* integer arguments %[diouxX] */
- enum { OCT, DEC, HEX } base;/* base for [diouxX] conversion */
- int dprec; /* a copy of prec if [diouxX], 0 otherwise */
- ! int fieldsz; /* field size expanded by sign, etc */
- ! int realsz; /* field size expanded by dprec */
- // The initialization of 'size' is to suppress a warning that
- // 'size' might be used unitialized. It seems gcc can't
- // quite grok this spaghetti code ...
- --- 136,150 ----
- #ifdef FLOATING_POINT
- int softsign; /* temporary negative sign for floats */
- double _double; /* double precision arguments %[eEfgG] */
- + #ifndef USE_DTOA
- int fpprec; /* `extra' floating precision in [eEfgG] */
- #endif
- + #endif
- unsigned long _ulong; /* integer arguments %[diouxX] */
- enum { OCT, DEC, HEX } base;/* base for [diouxX] conversion */
- int dprec; /* a copy of prec if [diouxX], 0 otherwise */
- ! int dpad; /* extra 0 padding needed for integers */
- ! int fieldsz; /* field size expanded by sign, dpad etc */
- // The initialization of 'size' is to suppress a warning that
- // 'size' might be used unitialized. It seems gcc can't
- // quite grok this spaghetti code ...
- ***************
- *** 166,172 ****
- */
- #define PRINT(ptr, len) \
- do { if (sputn(ptr, len) != len) goto error; } while (0)
- - #define FLUSH() { }
- #if 1
- #define PAD_SP(howmany) if (padn(' ', howmany) < 0) goto error;
- #define PAD_0(howmany) if (padn('0', howmany) < 0) goto error;
- --- 168,173 ----
- ***************
- *** 220,226 ****
-
- flags = 0;
- dprec = 0;
- ! #ifdef FLOATING_POINT
- fpprec = 0;
- #endif
- width = 0;
- --- 221,227 ----
-
- flags = 0;
- dprec = 0;
- ! #if defined(FLOATING_POINT) && !defined (USE_DTOA)
- fpprec = 0;
- #endif
- width = 0;
- ***************
- *** 254,259 ****
- --- 255,261 ----
- /* FALLTHROUGH */
- case '-':
- flags |= LADJUST;
- + flags &= ~ZEROPAD; /* '-' disables '0' */
- goto rflag;
- case '+':
- sign = '+';
- ***************
- *** 277,283 ****
- * beginning of a field width.''
- * -- ANSI X3J11
- */
- ! flags |= ZEROPAD;
- goto rflag;
- case '1': case '2': case '3': case '4':
- case '5': case '6': case '7': case '8': case '9':
- --- 279,286 ----
- * beginning of a field width.''
- * -- ANSI X3J11
- */
- ! if (!(flags & LADJUST))
- ! flags |= ZEROPAD; /* '-' disables '0' */
- goto rflag;
- case '1': case '2': case '3': case '4':
- case '5': case '6': case '7': case '8': case '9':
- ***************
- *** 327,342 ****
- #ifdef USE_DTOA
- {
- ios::fmtflags fmt_flags = 0;
- if (flags & ALT)
- fmt_flags |= ios::showpoint;
- if (flags & LADJUST)
- ! fmt_flags |= ios::right;
- ! if (__outfloat(_double, this, ch, width,
- prec < 0 ? DEFPREC : prec,
- ! fmt_flags,
- ! sign,
- ! flags & ZEROPAD ? '0' : ' ') < 0)
- goto error;
- }
- // CHECK ERROR!
- continue;
- --- 330,348 ----
- #ifdef USE_DTOA
- {
- ios::fmtflags fmt_flags = 0;
- + int fill = ' ';
- if (flags & ALT)
- fmt_flags |= ios::showpoint;
- if (flags & LADJUST)
- ! fmt_flags |= ios::left;
- ! else if (flags & ZEROPAD)
- ! fmt_flags |= ios::internal, fill = '0';
- ! n = __outfloat(_double, this, ch, width,
- prec < 0 ? DEFPREC : prec,
- ! fmt_flags, sign, fill);
- ! if (n < 0)
- goto error;
- + ret += n;
- }
- // CHECK ERROR!
- continue;
- ***************
- *** 522,543 ****
-
- /*
- * compute actual size, so we know how much to pad.
- - * fieldsz excludes decimal prec; realsz includes it
- */
- ! #ifdef FLOATING_POINT
- fieldsz = size + fpprec;
- #else
- fieldsz = size;
- #endif
- if (sign)
- fieldsz++;
- else if (flags & HEXPREFIX)
- fieldsz += 2;
- ! realsz = dprec > fieldsz ? dprec : fieldsz;
-
- /* right-adjusting blank padding */
- if ((flags & (LADJUST|ZEROPAD)) == 0)
- ! PAD_SP(width - realsz);
-
- /* prefix */
- if (sign) {
- --- 528,552 ----
-
- /*
- * compute actual size, so we know how much to pad.
- */
- ! #if defined(FLOATING_POINT) && !defined (USE_DTOA)
- fieldsz = size + fpprec;
- #else
- fieldsz = size;
- #endif
- + dpad = dprec - size;
- + if (dpad < 0)
- + dpad = 0;
- +
- if (sign)
- fieldsz++;
- else if (flags & HEXPREFIX)
- fieldsz += 2;
- ! fieldsz += dpad;
-
- /* right-adjusting blank padding */
- if ((flags & (LADJUST|ZEROPAD)) == 0)
- ! PAD_SP(width - fieldsz);
-
- /* prefix */
- if (sign) {
- ***************
- *** 550,564 ****
-
- /* right-adjusting zero padding */
- if ((flags & (LADJUST|ZEROPAD)) == ZEROPAD)
- ! PAD_0(width - realsz);
-
- /* leading zeroes from decimal precision */
- ! PAD_0(dprec - fieldsz);
-
- /* the string or number proper */
- PRINT(cp, size);
-
- ! #ifdef FLOATING_POINT
- /* trailing f.p. zeroes */
- PAD_0(fpprec);
- #endif
- --- 559,573 ----
-
- /* right-adjusting zero padding */
- if ((flags & (LADJUST|ZEROPAD)) == ZEROPAD)
- ! PAD_0(width - fieldsz);
-
- /* leading zeroes from decimal precision */
- ! PAD_0(dpad);
-
- /* the string or number proper */
- PRINT(cp, size);
-
- ! #if defined(FLOATING_POINT) && !defined (USE_DTOA)
- /* trailing f.p. zeroes */
- PAD_0(fpprec);
- #endif
- ***************
- *** 565,579 ****
-
- /* left-adjusting padding (always blank) */
- if (flags & LADJUST)
- ! PAD_SP(width - realsz);
-
- /* finally, adjust ret */
- ! ret += width > realsz ? width : realsz;
-
- - FLUSH(); /* copy out the I/O vectors */
- }
- done:
- - FLUSH();
- return ret;
- error:
- return EOF;
- --- 574,586 ----
-
- /* left-adjusting padding (always blank) */
- if (flags & LADJUST)
- ! PAD_SP(width - fieldsz);
-
- /* finally, adjust ret */
- ! ret += width > fieldsz ? width : fieldsz;
-
- }
- done:
- return ret;
- error:
- return EOF;
- ***************
- *** 841,843 ****
- --- 848,859 ----
- }
-
- #endif /* defined(FLOATING_POINT) && !defined(USE_DTOA) */
- +
- + int streambuf::form(char const *format ...)
- + {
- + va_list ap;
- + va_start(ap, format);
- + int count = vform(format, ap);
- + va_end(ap);
- + return count;
- + }
- *** 1.5 1992/07/20 22:21:08
- --- sbufvsca.cc 1993/02/22 17:06:37
- ***************
- *** 30,39 ****
- #include <varargs.h>
- #endif
-
- - #ifdef sun /* SunOS incorrectly defines size_t to be int. */
- - #define hardway
- - #endif
- -
- #ifndef NO_FLOATING_POINT
- #define FLOATING_POINT
- #endif
- --- 30,35 ----
- ***************
- *** 88,94 ****
-
- int streambuf::vscan(char const *fmt0,
- _G_va_list ap,
- ! ios::iostate *state /* = NULL */)
- {
- register const u_char *fmt = (const u_char *)fmt0;
- register int c; /* character from format, or conversion */
- --- 84,90 ----
-
- int streambuf::vscan(char const *fmt0,
- _G_va_list ap,
- ! ios *stream /* = NULL */)
- {
- register const u_char *fmt = (const u_char *)fmt0;
- register int c; /* character from format, or conversion */
- ***************
- *** 417,431 ****
-
- case CT_INT:
- /* scan an integer as if by strtol/strtoul */
- - #ifdef hardway
- if (width == 0 || width > sizeof(buf) - 1)
- width = sizeof(buf) - 1;
- - #else
- - /* size_t is unsigned, hence this optimisation */
- - if (--width > sizeof(buf) - 2)
- - width = sizeof(buf) - 2;
- - width++;
- - #endif
- flags |= SIGNOK | NDIGITS | NZDIGITS;
- for (p = buf; width; width--) {
- c = *_gptr;
- --- 413,420 ----
- ***************
- *** 555,569 ****
- #ifdef FLOATING_POINT
- case CT_FLOAT:
- /* scan a floating point number as if by strtod */
- - #ifdef hardway
- if (width == 0 || width > sizeof(buf) - 1)
- width = sizeof(buf) - 1;
- - #else
- - /* size_t is unsigned, hence this optimisation */
- - if (--width > sizeof(buf) - 2)
- - width = sizeof(buf) - 2;
- - width++;
- - #endif
- flags |= SIGNOK | NDIGITS | DPTOK | EXPOK;
- for (p = buf; width; width--) {
- c = *_gptr;
- --- 544,551 ----
- ***************
- *** 655,665 ****
- if (nassigned == 0)
- nassigned = -1;
- match_failure:
- ! if (state)
- ! *state |= ios::failbit;
- done:
- ! if (state && seen_eof)
- ! *state |= ios::eofbit;
- return (nassigned);
- }
-
- --- 637,647 ----
- if (nassigned == 0)
- nassigned = -1;
- match_failure:
- ! if (stream)
- ! stream->set(ios::failbit);
- done:
- ! if (stream && seen_eof)
- ! stream->set(ios::eofbit);
- return (nassigned);
- }
-
- ***************
- *** 756,759 ****
- --- 738,750 ----
- }
- }
- /* NOTREACHED */
- + }
- +
- + int streambuf::scan(char const *format ...)
- + {
- + va_list ap;
- + va_start(ap, format);
- + int count = vscan(format, ap);
- + va_end(ap);
- + return count;
- }
- *** 1.3 1992/06/08 20:42:41
- --- sgetline.cc 1993/02/22 17:06:38
- ***************
- *** 21,27 ****
-
- // Read chars into buf (of size n), until delim is seen.
- // Return number of chars read (at most n-1).
- ! // If extract_delim < 0, leave delimited unread.
- // If extract_delim > 0, insert delim in output.
-
- long streambuf::sgetline(char* buf, size_t n, char delim, int extract_delim)
- --- 21,27 ----
-
- // Read chars into buf (of size n), until delim is seen.
- // Return number of chars read (at most n-1).
- ! // If extract_delim < 0, leave delimiter unread.
- // If extract_delim > 0, insert delim in output.
-
- long streambuf::sgetline(char* buf, size_t n, char delim, int extract_delim)
- *** 1.4 1992/06/03 02:12:17
- --- stdstrbu.cc 1993/02/22 17:06:38
- ***************
- *** 16,28 ****
- // Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-
- #include <ioprivat.h>
- ! #include <g_config.h>
-
- ! #if _G_NAMES_HAVE_UNDERSCORE
- ! #define UNDERSCORE "_"
- ! #else
- ! #define UNDERSCORE ""
- ! #endif
-
- // To avoid problems depending on constructor order (and for
- // efficiency) the standard streambufs (and streams) are
- --- 16,32 ----
- // Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-
- #include <ioprivat.h>
- ! #include <stdio.h>
-
- ! // This file defines the standard streambufs, corresponding to cin, cout, cerr.
- ! // We define two sets:
- ! //
- ! // __std_filebuf_0, __std_filebuf_1, __std_filebuf_2 are filebufs using
- ! // file descriptor 0/1/2.
- ! //
- ! // __stdin_stdiobuf, __stdout_stdiobuf, __stderr_stdiobuf are stdiostreams
- ! // pointing to stdin, stdout, stderr.
- !
-
- // To avoid problems depending on constructor order (and for
- // efficiency) the standard streambufs (and streams) are
- ***************
- *** 35,40 ****
- --- 39,52 ----
- // (the address of) the virtual function table for the
- // filebuf class.
-
- + #if _G_NAMES_HAVE_UNDERSCORE
- + #define UNDERSCORE "_"
- + #else
- + #define UNDERSCORE ""
- + #endif
- +
- + // First define the filebuf-based objects.
- +
- #if !defined(vt_filebuf)
- #ifndef __GNUG__
- // This works for cfront.
- ***************
- *** 53,68 ****
- struct __file_fields f;
- };
-
- ! #define DEF_STD(NAME, FD, CHAIN, FLAGS) \
- ! _fake_filebuf NAME[1] = {{\
- { _IO_MAGIC+_S_LINKED+_S_IS_FILEBUF+_S_IS_BACKUPBUF+FLAGS, \
- ! 0, 0, 0, 0, 0, 0, 0, 0, CHAIN, 0, 0, 0, 0, 0},\
- ! vt_filebuf, {FD}}};
-
- ! DEF_STD(_cin_sbuf, 0, 0, _S_NO_WRITES);
- ! DEF_STD(_cout_sbuf, 1, (streambuf*)_cin_sbuf, _S_NO_READS);
- ! DEF_STD(_cerr_sbuf, 2, (streambuf*)_cout_sbuf, _S_NO_READS);
-
- ! DEF_STD(not_open_filebuf, -1, (streambuf*)0, _S_NO_READS+_S_NO_WRITES);
-
- ! streambuf* streambuf::_list_all = (streambuf*)_cerr_sbuf;
- --- 65,112 ----
- struct __file_fields f;
- };
-
- ! #define FILEBUF_LITERAL(CHAIN, FLAGS) \
- { _IO_MAGIC+_S_LINKED+_S_IS_FILEBUF+_S_IS_BACKUPBUF+FLAGS, \
- ! 0, 0, 0, 0, 0, 0, 0, 0, CHAIN, 0, 0, 0, 0, 0}
-
- ! #define DEF_FILEBUF(NAME, FD, CHAIN, FLAGS) \
- ! _fake_filebuf NAME[1] = {{FILEBUF_LITERAL(CHAIN, FLAGS), vt_filebuf, {FD}}};
-
- ! DEF_FILEBUF(__std_filebuf_0, 0, 0, _S_NO_WRITES);
- ! DEF_FILEBUF(__std_filebuf_1, 1, (streambuf*)__std_filebuf_0, _S_NO_READS);
- ! DEF_FILEBUF(__std_filebuf_2, 2, (streambuf*)__std_filebuf_1,
- ! _S_NO_READS+_S_UNBUFFERED);
- !
- ! // Nest define the stdiobuf-bases objects.
- !
- ! #if !defined(vt_stdiobuf)
- ! #ifndef __GNUG__
- ! // This works for cfront.
- ! #define vt_stdiobuf __vtbl__7stdiobuf
- ! extern char vt_stdiobuf[1];
- ! #elif _G_DOLLAR_IN_LABEL
- ! extern char vt_stdiobuf[1] asm(UNDERSCORE "_vt$stdiobuf");
- ! #else
- ! extern char vt_stdiobuf[1] asm(UNDERSCORE "_vt.stdiobuf");
- ! #endif
- ! #endif /* !defined(vt_stdiobuf) */
- !
- ! struct _fake_stdiobuf {
- ! struct __streambuf s;
- ! char* vtable;
- ! struct __file_fields f;
- ! FILE *_f;
- ! };
-
- ! #define DEF_STDIOBUF(NAME, FILE, FD, CHAIN, FLAGS) \
- ! _fake_stdiobuf NAME[1] = {{ \
- ! FILEBUF_LITERAL(CHAIN, (FLAGS)|_S_UNBUFFERED),\
- ! vt_stdiobuf, {FD}, FILE}};
- !
- ! DEF_STDIOBUF(__stdin_stdiobuf, stdin, 0, (streambuf*)__std_filebuf_2,
- ! _S_NO_WRITES);
- ! DEF_STDIOBUF(__stdout_stdiobuf, stdout, 1, (streambuf*)__stdin_stdiobuf,
- ! _S_NO_READS);
- ! DEF_STDIOBUF(__stderr_stdiobuf, stderr, 2, (streambuf*)__stdout_stdiobuf,
- ! _S_NO_READS);
- ! streambuf* streambuf::_list_all = (streambuf*)__stderr_stdiobuf;
- *** 1.4 1992/06/03 02:12:17
- --- stdstrea.cc 1993/02/22 17:06:38
- ***************
- *** 18,40 ****
- #include <ioprivat.h>
- #include <g_config.h>
-
- ! #if _G_NAMES_HAVE_UNDERSCORE
- #define UNDERSCORE "_"
- #else
- #define UNDERSCORE ""
- #endif
-
- ! struct _fake_filebuf;
- !
- ! extern _fake_filebuf _cin_sbuf, _cout_sbuf, _cerr_sbuf;
- !
- ! #if 0 /* defined(__GNUC__) */
- ! // This hack was intended to trick gdb into thinking cin is really a
- ! // istream (and not a _fake_istream), but doesn't seem to work.
- ! #define STR_NAME(TYPE, NAME) TYPE __##NAME asm(UNDERSCORE #NAME)
- #else
- ! #define STR_NAME(TYPE, NAME) TYPE NAME
- #endif
- #define cin CIN
- #define cout COUT
- #define cerr CERR
- --- 18,58 ----
- #include <ioprivat.h>
- #include <g_config.h>
-
- ! // The ANSI draft requires that operations on cin/cout/cerr can be
- ! // mixed with operations on stdin/stdout/stderr on a character by
- ! // character basis. This normally requires that the streambuf's
- ! // used by cin/cout/cerr be stdiostreams. However, if the stdio
- ! // implementation is the one that is built using this library,
- ! // then we don't need to, since in that case stdin/stdout/stderr
- ! // are identical to &__std_filebuf_0/&__std_filebuf_1/&__std_filebuf_2.
- !
- ! #ifdef _STDIO_USES_IOSTREAM
- ! #define USE_FILEBUF
- ! #endif
- !
- ! #if defined(NAMES_HAVE_UNDERSCORE) || defined(_G_NAMES_HAVE_UNDERSCORE)
- #define UNDERSCORE "_"
- #else
- #define UNDERSCORE ""
- #endif
-
- ! #ifdef USE_FILEBUF
- ! #define CIN_SBUF __std_filebuf_0
- ! #define COUT_SBUF __std_filebuf_1
- ! #define CERR_SBUF __std_filebuf_2
- ! static int use_stdiobuf = 0;
- #else
- ! #define CIN_SBUF __stdin_stdiobuf
- ! #define COUT_SBUF __stdout_stdiobuf
- ! #define CERR_SBUF __stderr_stdiobuf
- ! static int use_stdiobuf = 1;
- #endif
- +
- + struct _fake_filebuf;
- + extern _fake_filebuf __std_filebuf_0, __std_filebuf_1, __std_filebuf_2;
- + struct _fake_stdiobuf;
- + extern _fake_stdiobuf __stdin_stdiobuf, __stdout_stdiobuf, __stderr_stdiobuf;
- +
- #define cin CIN
- #define cout COUT
- #define cerr CERR
- ***************
- *** 50,71 ****
- #else
- #define PAD 1
- #endif
- ! class _fake_istream {
- _ios_fields base;
- char filler[sizeof(struct istream)-sizeof(struct _ios_fields)+PAD];
- };
- ! class _fake_ostream {
- _ios_fields base;
- char filler[sizeof(struct ostream)-sizeof(struct _ios_fields)+PAD];
- };
-
- #define STD_STR(SBUF, TIE, EXTRA_FLAGS) \
- ! (streambuf*)&SBUF, TIE, 0, ios::dont_close|ios::skipws|EXTRA_FLAGS, ' ', 0, 6
-
- ! STR_NAME(_fake_ostream, cout) = { STD_STR(_cout_sbuf, NULL, 0) };
- ! STR_NAME(_fake_ostream, cerr) =
- ! { STD_STR(_cerr_sbuf, (ostream*)&cout, ios::unitbuf) };
- ! STR_NAME(_fake_istream, cin) = { STD_STR(_cin_sbuf, (ostream*)&cout, 0) };
-
- /* Only for (partial) compatibility with AT&T's library. */
- ! STR_NAME(_fake_ostream, clog) = { STD_STR(_cerr_sbuf, (ostream*)&cout, 0) };
- --- 68,127 ----
- #else
- #define PAD 1
- #endif
- ! struct _fake_istream {
- ! struct myfields {
- ! _ios_fields *vb; /* pointer to virtual base class ios */
- ! _G_ssize_t _gcount;
- ! } mine;
- _ios_fields base;
- char filler[sizeof(struct istream)-sizeof(struct _ios_fields)+PAD];
- };
- ! struct _fake_ostream {
- ! struct myfields {
- ! _ios_fields *vb; /* pointer to virtual base class ios */
- ! } mine;
- _ios_fields base;
- char filler[sizeof(struct ostream)-sizeof(struct _ios_fields)+PAD];
- };
-
- #define STD_STR(SBUF, TIE, EXTRA_FLAGS) \
- ! (streambuf*)&SBUF, TIE, 0, ios::dont_close|ios::skipws|EXTRA_FLAGS, ' ',0,0,6
- !
- ! #define STREAM_DEF(TYPE, NAME, SBUF, TIE, EXTRA_FLAGS) \
- ! TYPE NAME = { {&NAME.base}, {STD_STR(SBUF, TIE, EXTRA_FLAGS) }};
-
- ! STREAM_DEF(_fake_ostream, cout, COUT_SBUF, NULL, 0)
- ! STREAM_DEF(_fake_ostream, cerr, CERR_SBUF, (ostream*)&cout, ios::unitbuf)
- ! STREAM_DEF(_fake_istream, cin, CIN_SBUF, (ostream*)&cout, 0)
-
- /* Only for (partial) compatibility with AT&T's library. */
- ! STREAM_DEF(_fake_ostream, clog, CERR_SBUF, (ostream*)&cout, 0)
- !
- ! // Switches between using __std_filebuf_{0,1,2} and
- ! // __std{in,out,err}_stdiobuf for standard streams. This is
- ! // normally not needed, but is provided for AT&T compatibility.
- !
- ! int ios::sync_with_stdio(int new_state)
- ! {
- ! #ifdef _STDIO_USES_IOSTREAM
- ! // It is always synced.
- ! return 0;
- ! #else
- ! if (new_state == use_stdiobuf) // The usual case now.
- ! return use_stdiobuf;
- ! if (new_state) {
- ! cout.base._strbuf = (streambuf*)&__stdout_stdiobuf;
- ! cin.base._strbuf = (streambuf*)&__stdin_stdiobuf;
- ! cerr.base._strbuf = (streambuf*)&__stderr_stdiobuf;
- ! clog.base._strbuf = (streambuf*)&__stderr_stdiobuf;
- ! } else {
- ! cout.base._strbuf = (streambuf*)&__std_filebuf_1;
- ! cin.base._strbuf = (streambuf*)&__std_filebuf_0;
- ! cerr.base._strbuf = (streambuf*)&__std_filebuf_2;
- ! clog.base._strbuf = (streambuf*)&__std_filebuf_2;
- ! }
- ! int old_state = use_stdiobuf;
- ! use_stdiobuf = new_state;
- ! return old_state;
- ! #endif
- ! }
- *** 1.5 1992/06/03 02:12:17
- --- stream.cc 1993/02/22 17:06:39
- ***************
- *** 17,23 ****
-
- char* form(const char* format, ...)
- {
- ! size_t space_left = EndBuffer - next_chunk;
- // If less that 25% of the space is available start over.
- if (space_left < (BUFSIZ>>2))
- next_chunk = Buffer;
- --- 17,23 ----
-
- char* form(const char* format, ...)
- {
- ! _G_size_t space_left = EndBuffer - next_chunk;
- // If less that 25% of the space is available start over.
- if (space_left < (BUFSIZ>>2))
- next_chunk = Buffer;
- ***************
- *** 41,47 ****
- // for each input byte, but normally 3 is plenty.
- int needed = size ? size
- : (base >= 8 ? 3 : 8) * sizeof(unsigned long) + 2;
- ! size_t space_left = EndBuffer - next_chunk;
- if (space_left <= needed)
- next_chunk = Buffer; // start over.
-
- --- 41,47 ----
- // for each input byte, but normally 3 is plenty.
- int needed = size ? size
- : (base >= 8 ? 3 : 8) * sizeof(unsigned long) + 2;
- ! _G_size_t space_left = EndBuffer - next_chunk;
- if (space_left <= needed)
- next_chunk = Buffer; // start over.
-
- *** 1.6 1992/07/20 22:21:08
- --- streambu.cc 1993/02/22 17:06:39
- ***************
- *** 22,27 ****
- --- 22,50 ----
- #include <ioprivat.h>
- #include <string.h>
-
- + void streambuf::_un_link()
- + {
- + if (_flags & _S_LINKED) {
- + streambuf **f;
- + for (f = &_list_all; *f != NULL; f = &(*f)->xchain()) {
- + if (*f == this) {
- + *f = xchain();
- + break;
- + }
- + }
- + _flags &= ~_S_LINKED;
- + }
- + }
- +
- + void streambuf::_link_in()
- + {
- + if ((_flags & _S_LINKED) == 0) {
- + _flags |= _S_LINKED;
- + xchain() = _list_all;
- + _list_all = this;
- + }
- + }
- +
- // Return minimum _pos markers
- // Assumes the current get area is the main get area.
- long streambuf::_least_marker()
- ***************
- *** 190,196 ****
- // for the atari we take a hit here so that bin/text modes are taken care of
- // automatically by sputc/sbumpc
-
- ! size_t streambuf::sputn(const char* s, size_t n) // OPTIMIZE THIS!
- {
- size_t count = 0;
-
- --- 213,219 ----
- // for the atari we take a hit here so that bin/text modes are taken care of
- // automatically by sputc/sbumpc
-
- ! _G_size_t streambuf::xsputn(const char* s, _G_size_t n) // OPTIMIZE THIS!
- {
- size_t count = 0;
-
- ***************
- *** 203,209 ****
- return count;
- }
-
- ! size_t streambuf::sgetn(char* s, size_t n) // OPTIMIZE THIS!
- {
- size_t count = 0;
- for (; count < n; count++) {
- --- 226,232 ----
- return count;
- }
-
- ! _G_size_t streambuf::xsgetn(char* s, _G_size_t n) // OPTIMIZE THIS!
- {
- size_t count = 0;
- for (; count < n; count++) {
- ***************
- *** 215,221 ****
- return count;
- }
-
- ! size_t streambuf::ignore(size_t n)
- {
- size_t more = n;
- int ch;
- --- 238,244 ----
- return count;
- }
-
- ! _G_size_t streambuf::ignore(_G_size_t n)
- {
- size_t more = n;
- int ch;
- ***************
- *** 225,237 ****
- }
-
- #else
- ! size_t streambuf::sputn(register const char* s, size_t n)
- {
- ! if (n <= 0)
- return 0;
- ! register size_t more = n;
- for (;;) {
- ! size_t count = _epptr - _pptr; // Space available.
- if (count > 0) {
- if (count > more)
- count = more;
- --- 248,261 ----
- }
-
- #else
- !
- ! _G_size_t streambuf::xsputn(register const char* s, _G_size_t n)
- {
- ! if ((long)n <= 0)
- return 0;
- ! register _G_size_t more = n;
- for (;;) {
- ! long count = _epptr - _pptr; // Space available.
- if (count > 0) {
- if (count > more)
- count = more;
- ***************
- *** 257,267 ****
- }
-
-
- ! size_t streambuf::sgetn(char* s, size_t n)
- {
- ! register size_t more = n;
- for (;;) {
- ! size_t count = _egptr - _gptr; // Data available.
- if (count > 0) {
- if (count > more)
- count = more;
- --- 281,291 ----
- }
-
-
- ! _G_size_t streambuf::xsgetn(char* s, _G_size_t n)
- {
- ! register _G_size_t more = n;
- for (;;) {
- ! long count = _egptr - _gptr; // Data available.
- if (count > 0) {
- if (count > more)
- count = more;
- ***************
- *** 285,295 ****
- return n - more;
- }
-
- ! size_t streambuf::ignore(size_t n)
- {
- ! register size_t more = n;
- for (;;) {
- ! long count = _egptr - _gptr; // Data available.
- if (count > 0) {
- if (count > more)
- count = more;
- --- 309,319 ----
- return n - more;
- }
-
- ! _G_size_t streambuf::ignore(_G_size_t n)
- {
- ! register _G_size_t more = n;
- for (;;) {
- ! int long = _egptr - _gptr; // Data available.
- if (count > 0) {
- if (count > more)
- count = more;
- ***************
- *** 301,309 ****
- }
- return n - more;
- }
- ! #endif /* atari */
-
- ! int streambuf::padn(char pad, int count)
- {
- #define PADSIZE 16
- static char const blanks[PADSIZE] =
- --- 325,333 ----
- }
- return n - more;
- }
- ! #endif
-
- ! int streambuf::padn(char pad, _G_size_t count)
- {
- #define PADSIZE 16
- static char const blanks[PADSIZE] =
- ***************
- *** 312,318 ****
- {'0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0'};
- char padbuf[PADSIZE];
- const char *padptr;
- ! register int i;
-
- if (pad == ' ')
- padptr = blanks;
- --- 336,342 ----
- {'0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0'};
- char padbuf[PADSIZE];
- const char *padptr;
- ! register long i;
-
- if (pad == ' ')
- padptr = blanks;
- ***************
- *** 339,355 ****
-
- int streambuf::pbackfail(int c)
- {
- ! return EOF;
- ! }
- !
- ! int streambuf::ungetfail()
- ! {
- ! if (seekoff(-1, ios::cur, ios::in) == EOF)
- return EOF;
- ! return sgetc();
- }
-
- ! streambuf* streambuf::setbuf(char* p, size_t len)
- {
- if (sync() == EOF)
- return NULL;
- --- 363,378 ----
-
- int streambuf::pbackfail(int c)
- {
- ! if (_gptr > _eback)
- ! _gptr--;
- ! else if (seekoff(-1, ios::cur, ios::in) == EOF)
- return EOF;
- ! if (c != EOF && *_gptr != c)
- ! *_gptr = c;
- ! return (unsigned char)c;
- }
-
- ! streambuf* streambuf::setbuf(char* p, _G_size_t len)
- {
- if (sync() == EOF)
- return NULL;
- ***************
- *** 388,394 ****
-
- int streambuf::doallocate()
- {
- ! char *buf = malloc((size_t)__DEFAULT_BUFSIZ__);
- if (buf == NULL)
- return EOF;
- setb(buf, buf+__DEFAULT_BUFSIZ__, 1);
- --- 411,417 ----
-
- int streambuf::doallocate()
- {
- ! char *buf = (char *)malloc((size_t)__DEFAULT_BUFSIZ__);
- if (buf == NULL)
- return EOF;
- setb(buf, buf+__DEFAULT_BUFSIZ__, 1);
- ***************
- *** 412,421 ****
- }
-
- #ifdef atarist
- ! extern "C" extern int __default_mode__;
- #endif
-
- ! streambuf::streambuf(long flags)
- {
- #ifdef atarist
- if(!(flags & _IOS_TEXT))
- --- 435,444 ----
- }
-
- #ifdef atarist
- ! extern "C" int __default_mode__;
- #endif
-
- ! streambuf::streambuf(unsigned long flags)
- {
- #ifdef atarist
- if(!(flags & _IOS_TEXT))
- ***************
- *** 461,482 ****
-
- int streambuf::sputbackc(char c)
- {
- ! if (gptr() <= eback()) return pbackfail(c);
- ! gbump(-1);
- ! // Don't write into the get buffer if we don't have to.
- ! if (*gptr() != c)
- ! *gptr() = c;
- ! return (unsigned char)c;
- }
-
- int streambuf::sungetc()
- {
- ! if (gptr() > eback()) {
- ! gbump(-1);
- ! return (unsigned char)*gptr();
- }
- else
- ! return ungetfail();
- }
-
- #if 0 /* Work in progress */
- --- 484,504 ----
-
- int streambuf::sputbackc(char c)
- {
- ! if (_gptr > _eback && (unsigned char)_gptr[-1] == (unsigned char)c) {
- ! _gptr--;
- ! return (unsigned char)c;
- ! }
- ! return pbackfail(c);
- }
-
- int streambuf::sungetc()
- {
- ! if (_gptr > _eback) {
- ! _gptr--;
- ! return (unsigned char)*_gptr;
- }
- else
- ! return pbackfail(EOF);
- }
-
- #if 0 /* Work in progress */
- ***************
- *** 499,505 ****
-
- int streambuf::set_column(int i)
- {
- - overflow(EOF);
- _cur_column = i+1;
- return 0;
- }
- --- 521,526 ----
- ***************
- *** 606,612 ****
- }
- }
-
- ! int streambuf::seekmark(streammarker& mark, int delta = 0)
- {
- if (mark._sbuf != this)
- return EOF;
- --- 627,633 ----
- }
- }
-
- ! int streambuf::seekmark(streammarker& mark, long delta /* = 0 */)
- {
- if (mark._sbuf != this)
- return EOF;
- ***************
- *** 673,682 ****
- setg(new_buf, new_buf+(new_size-old_size), new_buf+new_size);
- _aux_limit = _gptr;
- }
- ! gbump(-1);
- ! if (*gptr() != c)
- ! *gptr() = c;
- ! return (unsigned char)c;
- }
-
- unsigned __adjust_column(unsigned start, const char *line, int count)
- --- 694,703 ----
- setg(new_buf, new_buf+(new_size-old_size), new_buf+new_size);
- _aux_limit = _gptr;
- }
- ! _gptr--;
- ! if (c != EOF && *_gptr != c)
- ! *_gptr = c;
- ! return (unsigned char)*_gptr;
- }
-
- unsigned __adjust_column(unsigned start, const char *line, int count)
- ***************
- *** 688,693 ****
- --- 709,719 ----
- return start + count;
- }
-
- + int ios::readable() { return !(rdbuf()->_flags & _S_NO_READS); }
- + int ios::writable() { return !(rdbuf()->_flags & _S_NO_WRITES); }
- + int ios::is_open() { return rdbuf()
- + && (rdbuf()->_flags & _S_NO_READS+_S_NO_WRITES)
- + != _S_NO_READS+_S_NO_WRITES; }
-
- #if defined(linux)
- #define IO_CLEANUP ;
- *** 1.6 1992/07/17 18:24:43
- --- strstrea.cc 1993/02/22 17:06:39
- ***************
- *** 21,58 ****
- #include <ioprivat.h>
- #include <strstrea.h>
-
- ! istrstream::istrstream(char *cp) : istream(NULL)
- {
- ! _strbuf = new strstreambuf(cp, 0, NULL);
- }
-
- ! istrstream::istrstream(char *cp, int n) : istream(NULL)
- {
- ! _strbuf = new strstreambuf(cp, n, NULL);
- }
-
- ! ostrstream::ostrstream() : ostream(NULL)
- {
- ! _strbuf = new strstreambuf;
- }
-
- ! ostrstream::ostrstream(char *cp, int n, int mode) : ostream(NULL)
- {
- ! char *pstart;
- ! if (mode == ios::app || mode == ios::ate)
- ! pstart = cp + strlen(cp);
- ! else
- ! pstart = cp;
- ! _strbuf = new strstreambuf(cp, n, pstart);
- ! }
- !
- !
- ! strstream::strstream() : iostream(NULL)
- ! {
- ! _strbuf = new strstreambuf;
- }
-
- ! strstream::strstream(char *cp, int n, int mode) : iostream(NULL)
- {
- char *pstart;
- if (mode == ios::app || mode == ios::ate)
- --- 21,47 ----
- #include <ioprivat.h>
- #include <strstrea.h>
-
- ! static void* default_alloc(_G_size_t size)
- {
- ! return (void*)new char[size];
- }
-
- ! static void default_free(void* ptr)
- {
- ! delete [] (char*)ptr;
- }
-
- ! istrstream::istrstream(const char *cp, _G_size_t n)
- {
- ! init(new strstreambuf(cp, n));
- }
-
- ! ostrstream::ostrstream()
- {
- ! init(new strstreambuf());
- }
-
- ! strstreambase::strstreambase(char *cp, _G_size_t n, int mode)
- {
- char *pstart;
- if (mode == ios::app || mode == ios::ate)
- ***************
- *** 59,72 ****
- pstart = cp + strlen(cp);
- else
- pstart = cp;
- ! _strbuf = new strstreambuf(cp, n, pstart);
- }
-
- -
- char *strstreambuf::str()
- {
- freeze(1);
- ! return _buffer;
- }
-
- _G_size_t strstreambuf::pcount()
- --- 48,60 ----
- pstart = cp + strlen(cp);
- else
- pstart = cp;
- ! init(new strstreambuf(cp, n, pstart));
- }
-
- char *strstreambuf::str()
- {
- freeze(1);
- ! return base();
- }
-
- _G_size_t strstreambuf::pcount()
- ***************
- *** 76,112 ****
- return put_len;
- }
-
- ! int strstreambuf::overflow(int c = EOF)
- {
- const int flush_only = c == EOF;
- size_t pos = pptr() - pbase();
- size_t get_pos = gptr() - pbase();
- if (pos > _len) _len = pos;
- ! if (pos >= _size + flush_only) {
- char *new_buf;
- ! size_t new_size = 2 * _size;
- ! if (_frozen) /* not allowed to enlarge */
- return EOF;
- ! else {
- ! new_buf = ALLOC_BUF(new_size);
- ! memcpy(new_buf, _buffer, _size);
- ! }
- if (new_buf == NULL) {
- // __ferror(fp) = 1;
- return EOF;
- }
- - _size = new_size;
- #if 0
- if (lenp == &_len) /* use '\0'-filling */
- ! memset(new_buf + pos, 0, _size - pos);
- #endif
- ! _buffer = new_buf;
- ! setb(new_buf, new_buf + _size, 1);
- }
-
- ! setp(_buffer, _buffer + _size);
- pbump(pos);
- ! setg(_buffer, _buffer + get_pos, _buffer + _len);
- if (!flush_only) {
- *pptr() = (unsigned char) c;
- pbump(1);
- --- 64,102 ----
- return put_len;
- }
-
- ! int strstreambuf::overflow(int c /* = EOF */)
- {
- const int flush_only = c == EOF;
- + if (_flags & _S_NO_WRITES)
- + return flush_only ? 0 : EOF;
- size_t pos = pptr() - pbase();
- size_t get_pos = gptr() - pbase();
- if (pos > _len) _len = pos;
- ! if (pos >= blen() + flush_only) {
- char *new_buf;
- ! size_t new_size = 2 * blen();
- ! if (frozen()) /* not allowed to enlarge */
- return EOF;
- ! new_buf = (char*)(*_allocate_buffer)(new_size);
- ! memcpy(new_buf, base(), blen());
- if (new_buf == NULL) {
- // __ferror(fp) = 1;
- return EOF;
- }
- #if 0
- if (lenp == &_len) /* use '\0'-filling */
- ! memset(new_buf + pos, 0, blen() - pos);
- #endif
- ! if (_base) {
- ! (*_free_buffer)(_base);
- ! _base = NULL; // So setb() won't try to delete _base.
- ! }
- ! setb(new_buf, new_buf + new_size, 1);
- }
-
- ! setp(base(), ebuf());
- pbump(pos);
- ! setg(base(), base() + get_pos, base() + _len);
- if (!flush_only) {
- *pptr() = (unsigned char) c;
- pbump(1);
- ***************
- *** 118,124 ****
- {
- size_t ppos = pptr() - pbase();
- if (ppos > _len) _len = ppos;
- ! setg(_buffer, gptr(), _buffer + _len);
- if (gptr() < egptr())
- return *gptr();
- else
- --- 108,114 ----
- {
- size_t ppos = pptr() - pbase();
- if (ppos > _len) _len = ppos;
- ! setg(base(), gptr(), base() + _len);
- if (gptr() < egptr())
- return *gptr();
- else
- ***************
- *** 125,198 ****
- return EOF;
- }
-
- - strstreambuf::strstreambuf()
- - {
- - _frozen = 0;
- - _len = 0;
- - _size = 128;
- - _buffer = ALLOC_BUF(_size);
- - setb(_buffer, _buffer+_size);
- - setp(_buffer, _buffer+_size);
- - setg(_buffer, _buffer, _buffer);
- - }
-
- ! strstreambuf::strstreambuf(int initial)
- {
- - _frozen = 0;
- _len = 0;
- ! if (initial < 16)
- ! initial = 16;
- ! _size = initial;
- ! _buffer = ALLOC_BUF(_size);
- ! setb(_buffer, _buffer+_size);
- ! setp(_buffer, _buffer+_size);
- ! setg(_buffer, _buffer, _buffer);
- }
-
- ! strstreambuf::strstreambuf(char *ptr, size_t size, char *pstart)
- {
- - _frozen = 1;
- if (size == 0)
- ! _size = strlen(ptr);
- ! else if (size < 0) {
- // If size is negative 'the characters are assumed to
- ! // continue indefinitely.'
- ! // The following semi-portable kludge tries to do that.
- ! // It assumes that sizeof(long) == sizeof(pointer).
- ! // Hence, (unsigned long)(-1) should be the largest
- ! // possible address.
- unsigned long highest = (unsigned long)(-1);
- // Pointers are signed on some brain-damaged systems, in
- // which case we divide by two to get the maximum signed address.
- if ((char*)highest < ptr)
- highest >>= 1;
- ! _size = (char*)highest - ptr;
- }
- ! else
- ! _size = size;
- ! _buffer = ptr;
- ! setb(_buffer, _buffer+_size);
- if (pstart) {
- ! setp(_buffer, _buffer+_size);
- ! pbump(pstart-_buffer);
- ! setg(_buffer, _buffer, pstart);
- }
- else {
- ! setp(_buffer, _buffer);
- ! setg(_buffer, _buffer, _buffer+_size);
- }
- ! _len = egptr() - _buffer;
- }
-
- strstreambuf::~strstreambuf()
- {
- ! if (_frozen == 0)
- ! FREE_BUF(_buffer);
- }
-
- ! virtual streampos strstreambuf::seekoff(streamoff off, _seek_dir dir,
- int mode /*=ios::in|ios::out*/)
- {
- size_t cur_size = pcount();
- streampos new_pos = EOF;
-
- --- 115,189 ----
- return EOF;
- }
-
-
- ! void strstreambuf::init_dynamic(_alloc_type alloc, _free_type free,
- ! _G_size_t initial_size)
- !
- {
- _len = 0;
- ! if (initial_size < 16)
- ! initial_size = 16;
- ! _allocate_buffer = alloc ? alloc : default_alloc;
- ! _free_buffer = free ? free : default_free;
- ! char * buf = (char*)(*_allocate_buffer)(initial_size);
- ! setb(buf, buf + initial_size, 1);
- ! setp(buf, buf + initial_size);
- ! setg(buf, buf, buf);
- }
-
- ! void strstreambuf::init_static(char *ptr, long size, char *pstart)
- {
- if (size == 0)
- ! size = strlen(ptr);
- ! else if ((long)size < 0) {
- // If size is negative 'the characters are assumed to
- ! // continue indefinitely.' This is kind of messy ...
- ! #if 1
- ! size = 512;
- ! // Try increasing powers of 2, as long as we don't wrap around.
- ! // This can lose in pathological cases (ptr near the end
- ! // of the address space). A better solution might be to
- ! // adjust the size on underflow/overflow. FIXME.
- ! for (long s; s = 2*size, s > 0 && ptr + s > ptr && s < 0x4000000L; )
- ! size = s;
- ! size = s;
- ! #else
- ! // The following semi-portable kludge assumes that
- ! // sizeof(unsigned long) == sizeof(char*). Hence,
- ! // (unsigned long)(-1) should be the largest possible address.
- unsigned long highest = (unsigned long)(-1);
- // Pointers are signed on some brain-damaged systems, in
- // which case we divide by two to get the maximum signed address.
- if ((char*)highest < ptr)
- highest >>= 1;
- ! size = (char*)highest - ptr;
- ! #endif
- }
- ! setb(ptr, ptr+size);
- if (pstart) {
- ! setp(ptr, ebuf());
- ! pbump(pstart-ptr);
- ! setg(ptr, ptr, pstart);
- }
- else {
- ! setp(ptr, ptr);
- ! setg(ptr, ptr, ebuf());
- }
- ! _len = egptr() - ptr;
- }
-
- strstreambuf::~strstreambuf()
- {
- ! if (_base && !(_flags & _S_USER_BUF))
- ! (_free_buffer)(_base);
- ! _base = NULL;
- }
-
- ! streampos strstreambuf::seekoff(streamoff off, _seek_dir dir,
- int mode /*=ios::in|ios::out*/)
- {
- + _allocate_buffer = default_alloc;
- + _free_buffer = default_free;
- size_t cur_size = pcount();
- streampos new_pos = EOF;
-
- ***************
- *** 210,216 ****
- }
- if (off < 0 || (size_t)off > cur_size)
- return EOF;
- ! setg(_buffer, _buffer + off, _buffer + cur_size);
- new_pos = off;
- }
-
- --- 201,207 ----
- }
- if (off < 0 || (size_t)off > cur_size)
- return EOF;
- ! setg(base(), base() + off, base() + cur_size);
- new_pos = off;
- }
-
- ***************
- *** 228,235 ****
- }
- if (off < 0 || (size_t)off > cur_size)
- return EOF;
- ! pbump(_buffer + off - pptr());
- new_pos = off;
- }
- return new_pos;
- }
- --- 219,233 ----
- }
- if (off < 0 || (size_t)off > cur_size)
- return EOF;
- ! pbump(base() + off - pptr());
- new_pos = off;
- }
- return new_pos;
- + }
- +
- + int strstreambuf::pbackfail(int c)
- + {
- + if ((_flags & _S_NO_WRITES) && c != EOF)
- + return EOF;
- + return backupbuf::pbackfail(c);
- }
- *** 1.1 1992/03/22 07:42:32
- --- xsfile.cc 1993/02/22 17:06:46
- ***************
- *** 20,38 ****
- #endif
- #include <xsfile.h>
-
- ! SFile::SFile(const char *filename, size_t size, int mode, int prot)
- : fstream(filename, mode, prot)
- {
- sz = size;
- }
-
- ! SFile::SFile(int fd, size_t size)
- : fstream(fd)
- {
- sz = size;
- }
-
- ! void SFile::open(const char *name, size_t size, int mode, int prot)
- {
- fstream::open(name, mode, prot);
- sz = size;
- --- 20,38 ----
- #endif
- #include <xsfile.h>
-
- ! SFile::SFile(const char *filename, _G_size_t size, int mode, int prot)
- : fstream(filename, mode, prot)
- {
- sz = size;
- }
-
- ! SFile::SFile(int fd, _G_size_t size)
- : fstream(fd)
- {
- sz = size;
- }
-
- ! void SFile::open(const char *name, _G_size_t size, int mode, int prot)
- {
- fstream::open(name, mode, prot);
- sz = size;
-